| 在介绍 FileInputStream、
FileOutputStream的
例子中,您使用了一个数组来作为数据读入的缓冲区,以文件存取为例的话,您知道磁碟存取的速度是远低于内存中的数据存取速度,为了减少对磁碟的存
,您一次读入一定长度的数据,如上一个主题范例中的1024位元组,而写入时也是一次写入一定长度的数据,这可以增加数据存取的效率。 BufferedInputStream与BufferedOutputStream可以为InputStream类的对象增加缓冲区功能,使用它们,您无需自行设计缓冲区。 BufferedInputStream的数据成员buf是个位元数组,默认为2048位元组大小,当读取数据来源时,例如文件, BufferedInputStream会尽量将buf填满,当使用read()方法时,实际上是先读取buf中的数据,而不是直接对数据来源作读取,当buf中的数据不足时,BufferedInputStream才会再从数据来源中提取数据。 BufferedOutputStream的数据成员buf是个位元数组,默认为512个位元组,当写入数据时,会先将数据存至buf中,当buf已满时才会一次将数据写至目的地,而不是每次写入都对目的地作写入。 将上一个主题的范例作个改写,这次不用自行设定缓冲区并进行判断了,使用BufferedInputStream、 BufferedOutputStream让程序看来简单一些,也比较有效率:
package onlyfun.caterpillar; 为了确保缓冲区中的数据一定被写出,建议最后执行flush()将缓冲区中的数据全部写出目的串流中。 BufferedInputStream、BufferedOutputStream并没有改变来源InputStream或目的 OutputStream的行为,读入或写出时的动作还是InputStream、OutputStream负责, BufferedInputStream、BufferedOutputStream只是在这之前动态的为它们加上一些功能(像是缓冲区功能),在这边是 以文件存取串流为例,实际上您可以在其它串流对象上加上BufferedInputStream、BufferedOutputStream功能。 |