从服务器获得响应(通过发送http请求(后,我尝试获取内容,如下所示:
HttpEntity entity = response.getEntity();
if (entity == null) {
...
}
String content;
try {
Reader reader = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8"));
content = IOUtils.toString(reader);
reader.close();
EntityUtils.consume(entity);
} catch (IOException e) {
...
}
是否有必要关闭阅读器(reader.close()
(?还是EntityUtils.consume(entity)
就够了?
您可以使用try-with-resources
-语句:
try(Reader reader = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8"))) {
content = IOUtils.toString(reader);
EntityUtils.consume(entity);
} catch (IOException e) {
...
}
这已经为您关闭了阅读器。
对于 Java 6,您应该使用以下方法:
Reader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8"));
content = IOUtils.toString(reader);
EntityUtils.consume(entity);
} catch (IOException e) {
...
} finally {
if(reader != null){
try {
reader.close();
} catch(IOException e){
// can not be closed
}
}
}
这是很好的做法。当使用允许"清理"的资源时,只需去做。 简单的方法是使用试用资源:
try (InputStreamReader isr = new InputStreamReader(entity.getContent(), "UTF-8");
Reader reader = new BufferedReader()) {
content = IOUtils.toString(reader);
EntityUtils.consume(entity);
} catch (IOException e) {
...
}
意思是:Java语言已经为你提供了自动发生的方法。