A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 林发明 于 2014-4-7 18:23 编辑

带缓冲技术的IO流到底是如何提高效率的?
底层还是使用的每次读取一个字节的方式吗?


评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

4 个回复

倒序浏览
拿字节缓冲流来说,它们内部封装了一个字节数组(即缓冲区),
(1)读取字节缓冲流,第一次读的时候,从文件里读取多个字节放到数组,以后每次取的时候从数组里取,数组取完了再从文件里一次性读取多个字节放到数组里...;
(2)写入字节缓冲流:调用写方法时,不是立即往文件里写,而是先写到数组里,数组写满了,再一次性的写到文件里;
就像从一个缸里往另一个缸里弄水,我们不是一次移动一滴,而是拿勺子(缓冲区)一次移动多滴;
缓冲区的目的就是为了减少硬盘磁头来回移动的次数,从而减少移动时间,来获得更高的读写效率

评分

参与人数 1技术分 +2 收起 理由
朱神必 + 2

查看全部评分

回复 使用道具 举报
带缓冲的 I/O 流有一个缓冲区(buffer),每次读取或写入时就可以读取或写入一组数据,而不像原生的输入输出流那样每次只读入或写出一个字节,这样就可以减少从系统读取数据的次数,进而提高性能。

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
拿BufferedReader举例,我们都知道FileReader的read()方法是一次取一个字符,这样实现效率比较慢,所以BufferedReader就有了,他是定义了一个内部缓冲区,将读到的字符存到一个字符数组里去,当存到一定数量的时候再写出去。避免了对硬盘的反复性读写,从而提高效率。底层调用的当然是一次读一个的read()方法。
这些视频里都有的,也可以看看源码(jdk里的src)。

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
伟大的程序设计者!在缓冲区技术的设计上费劲了脑筋!
像Java之父致敬!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马