Java之浅析BufferedInputStream和BufferedOutputStream的高效原理

/*普及:计算机中内存的访问速度(运算效率)比硬盘的访问速度(运算效率)要高得多*/

在代码中使用BufferedInputStream和BufferedOutputStream能够提高数据的传输效率原因如下:

①当只使用FileInputStream和FileOutputStream进行数据复制时,每次FileInputStram从数据源(硬存)中读取一个字节,然后交给b,再把b给FileOutputStream写入存储目的地(硬存),每存储一个字节需要访问硬存两次,以此往复直至存储完毕。

②当使用BufferedInputStream和BufferedOutputStream作为缓冲区后,BufferedInputStream内自带一个8192大小的字节数组,每次可从数据源(硬存)读取8192个字节的数据,然后一个一个的交给b,再由b存入BufferedOutputStream的8192大小的数组中,直到BufferedOutputStream中的数组存满时,然后写入数据传输终点,然后BufferedInputStream从数据源重新读取8192大小的数据,以此往复直至存储完毕。

假设现在数据源是一个8KB(8192个字节)大小的数据,需要复制到终点:

若使用FileInputStream和FileOutputStream进行传输,每次传输一个字节需要访问一次数据源一次数据传输终点,共访问两次硬存。若传输8KB则需要访问8*1024*2=16384次硬存。

若使用BufferedInputStream和BufferedOutputStream作为缓冲区进行传输,BufferedInputStream一次将所有数据读取完毕存入数组中,然后一个一个给b再存入BufferedOutputStream的数组,最终一次存入硬盘,访问硬盘两次。

有的人可能会疑问,使用BufferedInputStream和BufferedOutputStream虽然传输8KB的数据只需要访问2次硬盘,但是同样也需要在内存中一个一个的进行转存,这样感觉不是没什么区别吗?

此时就是计算机中最重要的特点了:内存的访问速度(运算效率)比硬盘的访问速度(运算效率)要高得多的多,然后BufferedInputStream和BufferedOutputStream的工作基本都是在内存中完成的,对硬盘的操作次数十分少,这就相对的提高了效率。现在举例只是以8KB为例,使用BufferedInputStream和BufferedOutputStream就能比单使用FileInputStream和FileOutputStream的效率提高很多很多,我们现实生活中随便一个文件基本都是以MB为单位或者GB为单位,这时两者的效率就天差地别了,所以这就是使用BufferedInputStream和BufferedOutputStream作为缓冲区传输的原因。

觉得有用的小伙伴请点赞、评论或收藏一下多支持支持博主小弟,跪安~~

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值