- 缓冲流是处理流的一种
- 处理流就是对现有的流的包装
- 注意: 我们创建处理流对象的时候不会抛出异常
- 提高文件的读写效率
- 因为缓冲流内部提供了一个缓冲区
- 默认缓冲区的大小为: 8192个byte — 也就是8kB
- 默认缓冲区大小: private static int DEFAULT_BUFFER_SIZE = 8192;
这里我们举一个例子: 这里例子中我们使用字节型缓冲流完成非文本文件的复制
eg:
package IO流.fileinputstream;
import java.io.*;
public class Test {
public static void main(String[] args) throws IOException {
File file1 = new File("abc.png");
File file2 = new File("abc4.png");
FileInputStream fis = new FileInputStream(file1);
FileOutputStream fos = new FileOutputStream(file2);
BufferedInputStream bis = new BufferedInputStream(fis);
BufferedOutputStream bos = new BufferedOutputStream(fos);
byte [] buffer = new byte[5];
int len = 0;
while((len = bis.read()) != -1){
bos.write(buffer,0,len);
}
bos.close();
bis.close();
// fos.close();
// fis.close();
}
}
- 这里我们只是做一个测试: – 所以就使用throws + 异常类型 的方法对异常进行了处理,但是在我们的实际编程中是使用try – catch – finally的方式对异常进行处理
- 我们要将流的关闭操作写到finally代码块中
- 我们这个程序是将本项目之下的abc.png文件复制一份, 我们运行完之后就会在本项目之下多一个abc4.png,我们可以发现这两个文件的内容和这两个文件的大小完全相同
- 关闭外层流的同时,内层流也会自动进行关闭
- 所以如果我们关闭了外层流, 这个时候我们可以将内层流的关闭省略掉
- 也就是内层流随着外层流的关闭而关闭
- BufferedOutputStream类中有一个flash()方法
- 可以调用这个方法就可以刷新缓冲区
关于为什么我们缓冲流中有这个缓冲区之后就提升文件读取的速度?
- 这个我们后面进行详细的讲解


![字节型缓冲流实现非文本文件的复制 [Java] 字节型缓冲流实现非文本文件的复制 [Java]](http://www.mshxw.com/aiimages/31/685918.png)
