ByteArrayOutputStream或ByteArrayInputStream是否需要手动关闭流-为什么

位置:首页>文章>详情   分类: 教程分享   阅读(273)   2023-12-20 19:32:02

操作示例图-6d36c13a3f0b4165acdca7826f0b7cd8.png

在处理图片的时候发现ByteArrayOutputStream不需要关闭,为啥? 

原理:

ByteArrayOutputStream或ByteArrayInputStream是内存读写流,不同于指向硬盘的流,它内部是使用字节数组读内存的,这个字节数组是它的成员变量,当这个数组不再使用变成垃圾的时候,Java的垃圾回收机制会将它回收。所以不需要关流。

源码参考:

ByteArrayOutputStream内部是数组: 

操作示例图-5be649817e1e42c1827fd6bee626b8cb.png

对比FileOutputStream的构造

操作示例图-8255fe50e52540f8829aaf804da0a031.png

 

很明显FileOutputStream的构造方法打开了IoBridge, 
也就是说,指向内存的流可以不用关闭,指向存储卡/硬盘的流一定要关闭。

 

通过ByteArrayInputStream和ByteArrayOutputStream的源码close()方法也可以发现,调用它们的close()方法啥也不会发生。

 

操作示例图-3d5b30bead6f4620a31c3364fd5f9c9f.png

 

操作示例图-f16a4b939e4b44aaae5637caba7eb1ee.png

 

 

从上图看到,确实,这两个流操作不需要调用close也可以,内部什么实现都没有。对比下方FileOutputStream有内容:

操作示例图-f51ddb584750437ead30ab013d7ead4f.png

操作示例图-1a932e6b42b041d89df6bf1ce347dce1.png

 

 

 

 

 

 

 

 

地址:https://www.leftso.com/article/2312201735064281.html

相关阅读

在处理图片的时候发现ByteArrayOutputStream不需要关闭,为啥?原理:ByteArrayOutputStream或ByteArrayInputStream是内存读写流,不同于指向...
Nginx 限流组件limit_req limit_req作用: 限制用户(同一个ip)在给定时间内HTTP请求的数量, 流量限制主要用作安全目的, 可以防止大量请求的...
情况说明后端提供的接口返回的二进制流,且是post方法实现代码wx.request({url:'接口地址',method:'post',header:{"token":'后端接口需要的token...
jdk8新特性流的使用
eclipse如何关闭java代码中某些部分/片段代码不被格式化,eclipse,代码部分不被格式化,How to turn off the Eclipse code formatter for...
某些时候,我们使用Java得POI工具内得XSSFSheet来创建excel表格,用于导出数据,但是下载到本地用excel打开得时候就会以下提示:​文件兼容错误提示解决办法: @GetMap...
Microsoft Edge 浏览器退出(关闭)时清楚浏览记录随着Microsoft Edge不断升级,在Windows 11上的Microsoft Edge浏览器退出时候清除浏览记录和之前的界...
方案一$("#dialog-modal").modal({backdrop:"static",//点击空白处不关闭对话框show:false,//按esc键盘不关闭.})方案二在弹框元素(下面以...
mysql 查看日志是否开启日志存放路径