inputStream关闭了,还有必要关闭InputStreamReader和BufferedReader吗?

发布于 2022-09-03 07:42:23 字数 226 浏览 11 评论 0

InputStream is = new FileInputStream(path);
InputStreamReader isr = new InputStreamReader(is, "utf-8");
BufferedReader br = new BufferedReader(isr);

如上代码,在使用完以后需要每个都关闭吗?还是只要关闭is就行了

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

拧巴小姐 2022-09-10 07:42:23

直接调用最外层的close()就可以了


update:

http://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html#close--

Closes the stream and releases any system resources associated with it

http://docs.oracle.com/javase/8/docs/api/java/io/InputStreamReader.html#close--

Closes the stream and releases any system resources associated with it

就是一个链条 你关闭最外面的 最外面的关闭里面的 里面的关闭更里面的


当然你如果硬要说关闭可能失败 一定要finally一下我也没办法

没企图 2022-09-10 07:42:23

如果这个问题是:BufferedReader关闭了,有必要关闭InputStreamReader和InputStream吗?,那这个问题还正常些........

Java的io包里面的stream和reader,都用的是装饰者模式。你只需要调用最外层装饰者的close方法,它就能将其所装饰的stream或者reader也一并关闭。

实在不行,打开BufferedReader的源代码看看close方法,就会发现它再这个方法里关闭了它所装饰的reader.

再实在不行,推荐在下的拙作一篇,也许能解决你的疑惑《Java IO : 流,以及装饰器模式在其上的运用》

吃→可爱长大的 2022-09-10 07:42:23

都要关的,按顺序一个个关,最好在finally中

finally{
    try{
        br.close();
        isr.close();
        is.close();
    }catch(Exception e){
        ......
    }
}

最先创建的最后关,最后创建的最先关

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文