关于IO流中的缓冲区?感受不到到底作用在哪里?求前辈指点

伊支独秀 2017-08-25 09:12:24
[size=14px]比如
File file = new File();
FileInputStream in = new FileInputStream(file);

BufferedInputStream bin = new BufferedInputStream(in);

byte[] bytes = new byte[1024];
int len;
while((len = bin.read(bytes)) != -1){
......
}

对计算机的存储不是很熟悉;感觉从系统中读取到文件后,写入输入流,然后就可以到内存中使用了
而这个缓冲流,还得需要读入到缓冲流,以及从缓冲流中读出;不都是一个一个的字节进行读取以及取出的吗?
网上大片的答案都是在说缓冲流就如同容量的汽车。。。我觉得这样更糊涂,期望大神可以从计算机的方面来分析一下
为什么缓冲流就快了呢?
我也搞不懂这个bytes数组的作用在哪里。。。
[/size]
...全文
639 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
一个帅逼 2017-08-29
  • 打赏
  • 举报
回复
引用 9 楼 hmyixiu 的回复:
引用 7楼hong_369 的回复:
就是你先读出来攒够一定数目,再去写;总比你一次读一个字节,再去写一个字节快!因为这样cpu的操作读写的次数大大下降了
我觉得读出来写到数组里的话,也得往数组里一个一个写啊,这样说对吗
不对哦,byte数组更像一个模具,就像你有一桶米,你一粒一粒的拿出来效率太慢,byte数组就是你找来了一个的瓢来舀一样
verphan 2017-08-29
  • 打赏
  • 举报
回复
进行系统调用是耗时操作,但是无论读取多少数据,每次读取消耗的时间都几乎相等。所以读取等量的数据时,使用缓冲区可以减少系统调用的次数,从而减少调用的时间。 这是比较底层的东西了,之前在学习c语言时候看到这种解释。楼主有兴趣可以参考《unix环境高级编程》P110,结合第三章理解
Vinvens 2017-08-28
  • 打赏
  • 举报
回复
缓冲流的传输通道更宽
zpgrzy 2017-08-28
  • 打赏
  • 举报
回复
举个例子 将一堆砖头搬从A点搬到B点,直接用字节流的话,就是一块一块的搬,这个过程要执行很多次,效率上会很低。 如果是采用缓冲流,那就相当于给你一个小推车,每次把小推车装满再搬,这样次数就会大大 降低,效率上也会有提升
伊支独秀 2017-08-28
  • 打赏
  • 举报
回复
引用 7楼hong_369 的回复:
就是你先读出来攒够一定数目,再去写;总比你一次读一个字节,再去写一个字节快!因为这样cpu的操作读写的次数大大下降了
我觉得读出来写到数组里的话,也得往数组里一个一个写啊,这样说对吗
西虹市胖墩 2017-08-26
  • 打赏
  • 举报
回复
byte数组,是在计算机内存中创建一个指定大小的数组,作为缓冲区,把读到的数据线存在缓冲区内,长度满了之后自动刷新
hong_369 2017-08-26
  • 打赏
  • 举报
回复
就是你先读出来攒够一定数目,再去写;总比你一次读一个字节,再去写一个字节快!因为这样cpu的操作读写的次数大大下降了
天涯若风 2017-08-26
  • 打赏
  • 举报
回复
不能说是缓存吧。就是就是把一个需要读取的文件,分成一块一块去读
senliyaofanghuo 2017-08-26
  • 打赏
  • 举报
回复
如果不用缓冲流就要一个字节一个字节读取,速度会很慢。
cherry-peng 2017-08-26
  • 打赏
  • 举报
回复
byte数组的作用就是可以直接读处数组这么大数据。而不是一个字节一个字节的读
cherry-peng 2017-08-26
  • 打赏
  • 举报
回复
还有缓冲区操作是可以直接读字符串的
cherry-peng 2017-08-26
  • 打赏
  • 举报
回复
得看缓冲区底层代码。
伊支独秀 2017-08-25
  • 打赏
  • 举报
回复
bytes在这里的作用也是缓冲吗

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧