为啥采用缓冲流会更快呢

为啥采用缓冲流会更快呢

虽然是从内存中取要更快,但是你还是依靠了FileInputStream从硬盘里面取啊,而且还不直接放入程序,而是放入缓冲区,这样不会更慢吗

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,以BufferedInputStream带缓冲区的字节输入流和InputStream字节输入流为例,FileInputStream只能传入一个文件,BufferedInputStream只能获得一个文件的缓冲流对象。

我们可以这样来理解一下:

http://img1.sycdn.imooc.com//climg/5ee3271709abb65403880234.jpg

数据可以当做是水,而各种流相当于水管

1、因为缓冲区的输入输出需要专门的缓冲输入输出流才能使用,也就是专门的水管。

2、缓冲区可以看做是一块特殊的区域,里面可以容纳一定数量的数据,可以看做是水库。

3、根据上面的内容,我们可以这样理解,使用BufferedInputStream是直接在水库中取出水(数据),而使用InputStream是直接从河边(文件)中直接取出水(数据内容)

从水库直接取水是便捷的,而从河边取水是原始而又效率较慢的,所以使用缓冲流是比较快的呐。

在java虚拟机中,直接从内存中读取数据是最快的,而缓冲区是内存中的一块区域,所以使用缓冲区会更快。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 慕UI2433440 提问者 #1
    但是水库的水也是从河边一次又一次取得啊,这样和直接去河边取不也差不多嘛
    2020-06-12 17:37:28
  • 好帮手慕阿慧 回复 提问者 慕UI2433440 #2
    同学你好,如果水库离河边很远,就有必要使用水库了。内存与内存之间的数据交换,比内存与硬盘之间的数据交换速率高了两个数量级。使用缓冲流,与频繁得去磁盘中拿数据相比,提高了执行效率,尤其是频繁的IO操作读取文件的时候。 祝学习愉快~
    2020-06-12 17:55:11
  • 慕UI2433440 提问者 #3
    也就是从河边取水到水库这段路程缓冲流和直接取速度差不多,但是水库到程序的这段路程缓冲流会快的多导致缓冲流更快对吗
    2020-06-12 18:01:05
苍星乱舞 2020-06-12 14:19:56

菜场里的东西在硬盘里

缓冲区在冰箱里

你是拿一棵葱就去菜场一趟,还是先把目前用的到一堆东西先放在冰箱里,哪一个快?

  • 提问者 慕UI2433440 #1
    其实我也是觉得是这样,不过FileInputStream()括号里面是只能一个文件,还是可以多个文件比如("imooc.txt","imooc1".txt")如果只能一个文件,那么不就相当于一次又一次跑去菜市场每次买一个菜了莫
    2020-06-12 14:52:18
  • 苍星乱舞 回复 提问者 慕UI2433440 #2
    我有点理解你的意思 问题是每一次read 都需要计算资源,比如找到这个文件在硬盘中的位置,如果是机械硬盘还要转动磁头, 所以相当于你需要修一条路去买菜,一次不多买些,下次还要修
    2020-06-12 15:20:26
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师