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作为缓冲区传输的原因。

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

扫描二维码关注公众号,回复: 8916756 查看本文章
发布了40 篇原创文章 · 获赞 33 · 访问量 3435

猜你喜欢

转载自blog.csdn.net/qq_40275740/article/details/104093290