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

编程教程 (815) 2024-11-26 14:39:04

操作示例图-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

 

 

 

 

 

 

 

 


评论
User Image
提示:请评论与当前内容相关的回复,广告、推广或无关内容将被删除。

相关文章
在处理图片的时候发现ByteArrayOutputStream不需要关闭,为啥?原理:ByteArrayOutputStream或ByteArrayInputStream是内存读写流,不同于指向...
MultipartFile.getInputStream打开的流是否需要关回答:是需要 建议使用方式public Result<String&gtl; upload(@
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...
1.安装ufw防火墙sudo apt-get install ufw提示:除开精简版一般云提供商LTS版本(18/22LTS)都是默认安装的。 2.查看防火墙启
某些时候,我们使用Java得POI工具内得XSSFSheet来创建excel表格,用于导出数据,但是下载到本地用excel打开得时候就会以下提示:​文件兼容错误提示解决办法: @GetMap...
       学习使用Gson JsonReader类,这是一个基于拉的流式JSON解析器,它有助于将JSON作为标记流来读取​GSON1. JsonReader是什么JsonReader是流式...
Java图片等比缩放 //重置大小(太宽没啥用)最大支持1.5倍图(1150*1.5) int maxWidth=(int)(920*1.5); //大小重置
使用jQuery判断元素是否在可视区域 $("#app").offset().top; offset().top表示 绝对偏移值,比如说有一个很长的页面,#ap
Microsoft Edge 浏览器退出(关闭)时清楚浏览记录随着Microsoft Edge不断升级,在Windows 11上的Microsoft Edge浏览器退出时候清除浏览记录和之前的界...
方案一$("#dialog-modal").modal({backdrop:"static",//点击空白处不关闭对话框show:false,//按esc键盘不关闭.})方案二在弹框元素(下面以...
有时候服务器运行的好好的,突然就无法连接无法执行任何操作了,强制重启后需要通过系统日志排查系统故障的原因只有root特权程序才能正常关闭系统。因此,当系统以正常
Java Spring MVC/Spring Boot 项目实现图片或文件下载,该方法同样适用于struts1/2环境或者普通Java Web项目环境。下载源码