Bob*_*Bob 9 java url exception-handling inputstream
我正在编写一个连接到网站并从中读取一行的应用程序.我是这样做的:
try{
URLConnection connection = new URL("www.example.com").openConnection();
BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String response = rd.readLine();
rd.close();
}catch (Exception e) {
//exception handling
}
Run Code Online (Sandbox Code Playgroud)
好吗?我的意思是,我在最后一行关闭了BufferedReader,但我没有关闭InputStreamReader.我应该从connection.getInputStream创建一个独立的InputStreamReader,还是从独立的InputStreamReader创建一个BufferedReader,而不是关闭所有两个读者?我认为最好将结束方法放在finally块中,如下所示:
InputStreamReader isr = null;
BufferedReader br = null;
try{
URLConnection connection = new URL("www.example.com").openConnection();
isr = new InputStreamReader(connection.getInputStream());
br = new BufferedReader(isr);
String response = br.readLine();
}catch (Exception e) {
//exception handling
}finally{
br.close();
isr.close();
}
Run Code Online (Sandbox Code Playgroud)
但它很难看,因为关闭方法可以抛出异常,所以我必须处理或抛出它.
哪种解决方案更好?或者什么是最好的解决方案?
Java中资源获取和发布的一般习惯是:
final Resource resource = acquire();
try {
use(resource);
} finally {
resource.release();
}
Run Code Online (Sandbox Code Playgroud)
注意:
try应该立即跟进收购.这意味着你不能将它包装在装饰器中并保持安全(并删除空格或将东西放在一行上没有帮助:).finally,否则它不会是异常安全的.null,使用final.否则你会有杂乱的代码和NPE的潜力.try块中捕获(Java会让你误入歧途).你可以用Execute Around成语来抽象这个废话,所以你不必重复自己(只是写了很多样板).
| 归档时间: |
|
| 查看次数: |
7877 次 |
| 最近记录: |