黑马程序员技术交流社区

标题: 带缓冲技术的IO流到底是如何提高效率的? [打印本页]

作者: 林发明    时间: 2014-4-6 17:19
标题: 带缓冲技术的IO流到底是如何提高效率的?
本帖最后由 林发明 于 2014-4-7 18:23 编辑

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



作者: 1453149997    时间: 2014-4-6 17:30
拿字节缓冲流来说,它们内部封装了一个字节数组(即缓冲区),
(1)读取字节缓冲流,第一次读的时候,从文件里读取多个字节放到数组,以后每次取的时候从数组里取,数组取完了再从文件里一次性读取多个字节放到数组里...;
(2)写入字节缓冲流:调用写方法时,不是立即往文件里写,而是先写到数组里,数组写满了,再一次性的写到文件里;
就像从一个缸里往另一个缸里弄水,我们不是一次移动一滴,而是拿勺子(缓冲区)一次移动多滴;
缓冲区的目的就是为了减少硬盘磁头来回移动的次数,从而减少移动时间,来获得更高的读写效率
作者: zzmxhm    时间: 2014-4-6 17:42
带缓冲的 I/O 流有一个缓冲区(buffer),每次读取或写入时就可以读取或写入一组数据,而不像原生的输入输出流那样每次只读入或写出一个字节,这样就可以减少从系统读取数据的次数,进而提高性能。
作者: bjfanxc    时间: 2014-4-6 17:52
拿BufferedReader举例,我们都知道FileReader的read()方法是一次取一个字符,这样实现效率比较慢,所以BufferedReader就有了,他是定义了一个内部缓冲区,将读到的字符存到一个字符数组里去,当存到一定数量的时候再写出去。避免了对硬盘的反复性读写,从而提高效率。底层调用的当然是一次读一个的read()方法。
这些视频里都有的,也可以看看源码(jdk里的src)。
作者: 一世英明    时间: 2014-4-7 23:06
伟大的程序设计者!在缓冲区技术的设计上费劲了脑筋!
像Java之父致敬!!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2