首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在InputStream#close()上使用finally关键字

在InputStream#close()上使用finally关键字
EN

Stack Overflow用户
提问于 2014-02-22 04:07:29
回答 6查看 159关注 0票数 0

基本上,我不太确定finally关键字的正确用法是什么,我只知道文本定义:保证代码将被执行,因为有时它不会执行。所以我希望我能在这个特定的代码中获得一些指导:

另外,如果不需要调用InputStream#close()try-catch

代码语言:javascript
代码运行次数:0
运行
复制
try {
    inputStream = entity.getContent();

    BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
    StringBuilder sb = new StringBuilder();

    String line = null;

    while((line = br.readLine()) != null) {
        sb.append(line);
        sb.append("\n");
    }

    responseText = sb.toString();
} catch(IOException e) {
    e.printStackTrace();
} finally {
    if (inputStream != null) {
        try {
            inputStream.close();
        } catch(IOException e) {
            e.printStackTrace();
        }
    }
}
EN

回答 6

Stack Overflow用户

发布于 2014-02-22 04:13:25

您也可以使用try-with-resources

如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
try (YourResource resource) {
    //Todo...
} catch(YourSpecificException ex) {
    //Todo...
}

在退出构造时,在两个段落之间声明的资源将自动关闭。

你甚至可以一次声明多个资源,用分号分隔它们。所有这些都在上面的链接中,真的。

票数 1
EN

Stack Overflow用户

发布于 2014-02-22 04:10:14

无论异常是由try块引起的,还是将not.So finally块用作post activity.In您用来关闭流的代码,都将始终执行finally块。

票数 0
EN

Stack Overflow用户

发布于 2014-02-22 04:11:58

finally块确保无论在try期间发生什么(成功或异常),它都将始终运行。这通常在清理资源时使用,如InputStreamSocket

try with resource范例清除了这一点,但会自动关闭Closeable类型的内容

代码语言:javascript
代码运行次数:0
运行
复制
try( InputStream inputStream = entity.getContent() )
{

}catch(Exception e)
{

}//declared resource in try automatically closed

http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21944180

复制
相关文章

相似问题

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