文件流不关闭的后果_java中这些stream流不需要关闭,你知道几个?

曾几何时,作为java程序员要记住的一条准则就是,流用完了一定要在关闭,一定要写在`finally`里。

finally {out.flush(); out.close();}

但是最近发现一个stream是不需要关闭的。它就是ByteArrayOutputStream,当然还有它的妹妹ByteArrayInputStream和表哥StringWriter。道理一样,我们就不讨论亲戚们了。

作为一种OutputStream它也extendsOutputStream,自然也有继承了flush()close()

c4643f3c322d3f22a0d9e7d899dd685d.png

但这2个方法的方法体为空。

   /**     * Closing a ByteArrayOutputStream has no effect. The methods in     * this class can be called after the stream has been closed without     * generating an IOException.     */    public void close() throws IOException {    }    /***    * OutputStream的方法,ByteArrayInputStream并未重写    */    public void flush() throws IOException {    }

究其原因也不难理解。其实ByteArrayInputStream内部实现是一个byte数组,是基于内存中字节数据的访问。并没有占用硬盘,网络等资源。就算是不关闭,用完了垃圾回收器也会回收掉。这点跟普通数组并没有区别。

但是,作为一个蛋疼的程序员,习惯性关闭流是一个好习惯,不管三七五十八,先close掉再说,现在close是空方法,保不齐哪天就有了呢?这也是百利无一害的事,就好像保健品,吃了不治病,但是也吃不坏。

结论就是:指向内存的流可以不用关闭,指向硬盘/网络等外部资源的流一定要关闭。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值