在处理图片的时候发现ByteArrayOutputStream不需要关闭,为啥?
原理:
ByteArrayOutputStream或ByteArrayInputStream是内存读写流,不同于指向硬盘的流,它内部是使用字节数组读内存的,这个字节数组是它的成员变量,当这个数组不再使用变成垃圾的时候,Java的垃圾回收机制会将它回收。所以不需要关流。
源码参考:
ByteArrayOutputStream内部是数组:
对比FileOutputStream的构造
很明显FileOutputStream的构造方法打开了IoBridge,
也就是说,指向内存的流可以不用关闭,指向存储卡/硬盘的流一定要关闭。
通过ByteArrayInputStream和ByteArrayOutputStream的源码close()方法也可以发现,调用它们的close()方法啥也不会发生。
从上图看到,确实,这两个流操作不需要调用close也可以,内部什么实现都没有。对比下方FileOutputStream有内容:
https://www.leftso.com/article/2312201735064281.html