关闭StreamReader

时间:2018-05-31 11:17:29

标签: java http 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.close())?或者EntityUtils.consume(entity)就足够了?

2 个答案:

答案 0 :(得分:3)

您可以使用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
        }
    }
}

答案 1 :(得分:2)

这是一种很好的做法。当使用允许“清理”的资源时,就去做吧。 简单的方法是使用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语言已经为您提供了自动执行此操作的方法。