您的位置 首页 java

java中这些stream流不需要关闭,你知道几个?

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

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

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

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

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

    /**
     * Closing a <tt>ByteArrayOutputStream</tt> has no effect. The methods in
     * this class can be called after the stream has been closed without
     * generating an <tt>IOException</tt>.
     */    public void close() throws IOException {
    }

    /***
    * OutputStream的方法,ByteArrayInputStream并未重写
    */    public void flush() throws IOException {
    }  

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

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

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

文章来源:智云一二三科技

文章标题:java中这些stream流不需要关闭,你知道几个?

文章地址:https://www.zhihuclub.com/176450.shtml

关于作者: 智云科技

热门文章

网站地图