关闭 StreamReader
Closing StreamReader
从服务器获得响应(通过发送 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 (reader.close()
)?还是 EntityUtils.consume(entity)
就够了?
这是很好的做法。当使用允许 "cleanup" 的资源时,就去做吧。
简单的方法是使用 try-with-resources:
try (InputStreamReader isr = new InputStreamReader(entity.getContent(), "UTF-8");
Reader reader = new BufferedReader()) {
content = IOUtils.toString(reader);
EntityUtils.consume(entity);
} catch (IOException e) {
...
}
含义:Java 语言已经为您提供了自动发生这种情况的方法。
您可以使用 try-with-resources
-语句:
try(Reader reader = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8"))) {
content = IOUtils.toString(reader);
EntityUtils.consume(entity);
} catch (IOException e) {
...
}
已经为您关闭 reader。
对于 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
}
}
}
从服务器获得响应(通过发送 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 (reader.close()
)?还是 EntityUtils.consume(entity)
就够了?
这是很好的做法。当使用允许 "cleanup" 的资源时,就去做吧。 简单的方法是使用 try-with-resources:
try (InputStreamReader isr = new InputStreamReader(entity.getContent(), "UTF-8");
Reader reader = new BufferedReader()) {
content = IOUtils.toString(reader);
EntityUtils.consume(entity);
} catch (IOException e) {
...
}
含义:Java 语言已经为您提供了自动发生这种情况的方法。
您可以使用 try-with-resources
-语句:
try(Reader reader = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8"))) {
content = IOUtils.toString(reader);
EntityUtils.consume(entity);
} catch (IOException e) {
...
}
已经为您关闭 reader。
对于 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
}
}
}