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
}
这样做好吗?我的意思是,在最后一行中关闭了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();
}
但是它很丑,因为关闭方法可能会抛出异常,所以我必须处理或者抛出它。
哪种解决方案更好呢?或者说什么是最好的解决方案呢?
finally
子句中存在一个小问题。由于InputStreamReader
和BufferedReader
构造函数可能会抛出异常,因此在finally
子句中isr
和br
仍然可能是null
。你应该将finally
子句更改为:finally {if(br!=null) br.close(); if(isr!=null) isr.close();}
。这还不正确,因为br.close()
可能会抛出异常,并且在这种情况下isr
将永远无法关闭。Andreas的答案似乎是我个人认为应该遵循的方式。 - Behrang