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

更多文章请关注公号(ID:CodeReading)

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

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

但有些Stream是不需要关闭的。比如ByteArrayOutputStream,当然还有它的妹妹ByteArrayInputStream和表哥StringWriter。道理一样,我们就不讨论亲戚们了。
作为一种OutputStream它也extendsOutputStream,自然也有实现了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()是空方法,保不齐哪天就有实现了呢?这也是百利无一害的事,就好像保健品,吃了不治病,但一般也吃不坏。

  • 结论就是:指向内存的流可以不用关闭,指向硬盘/网络等外部资源的流一定要关闭。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 流 Stream Java中(绝大部分编程语言类似)文件一般不是单独处理,而是视为输入输出(I/O)设备的一...
    entro阅读 5,846评论 0 7
  • 标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流等等,java中将输入输出抽象称为流,就好...
    navy_legend阅读 4,048评论 0 0
  • 1 什么是IO? 1 Java的IO机制有流IO和块IO两种,核心库 java.io是大多数面向数据流的IO类的主...
    paulpaullong阅读 3,196评论 0 1
  • 概念和作用 流:代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象流的本质:数据传输,根据数据传输...
    海人为记阅读 1,864评论 0 0
  • 概述 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是...
    wustor阅读 5,778评论 5 6

友情链接更多精彩内容