首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关闭StreamReader

关闭StreamReader
EN

Stack Overflow用户
提问于 2018-05-31 19:17:29
回答 2查看 85关注 0票数 2

在从服务器获得响应后(通过发送http请求),我尝试获取一个内容,如下所示:

代码语言:javascript
复制
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)就足够了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-31 19:19:37

这是一个很好的实践。当使用允许“清理”的资源时,就去做吧。简单的方法是使用try-with-resources:

代码语言:javascript
复制
try (InputStreamReader isr = new InputStreamReader(entity.getContent(), "UTF-8"); 
     Reader reader = new BufferedReader()) {
    content = IOUtils.toString(reader);
    EntityUtils.consume(entity);
} catch (IOException e) {
    ...
}

含义: Java语言已经为您提供了自动执行此操作的方法。

票数 2
EN

Stack Overflow用户

发布于 2018-05-31 19:21:02

您可以使用try-with-resources-statement:

代码语言:javascript
复制
try(Reader reader = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8"))) {
    content = IOUtils.toString(reader);
    EntityUtils.consume(entity);
} catch (IOException e) {
    ...
}

它已经为你关闭了阅读器。

对于Java 6,您应该使用以下内容:

代码语言:javascript
复制
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
        }
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50623077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档