简介
BufferedOuputStream用于OutputStream的缓冲输入流类,BufferedInputStream用于InputSteam的缓冲输出流
原理
由于CPU的速度远远大于IO操作的速度,我们引入了缓冲区的概念。把数据从目标文件中取出放到缓冲区中,然后再从缓冲区中一点点的写入到我们需要存储的目标内存中。以及我们在利用输入流的时候,我们也可以先把数据先读到缓冲区中,再从缓冲区中输入,从而避免每次读入一个字节都要引起底层系统的引用
目标文件:可能来源于外设(你的U盘,硬盘)
目标存储:一般是我们的内存
需要注意的是,输入流和输出流要优先创建,因为这两种类都是作为修饰类,也就是能够对输入输出流进行优化
缓冲输入流
我们先从类的简介开始

BufferedInputStream简介.jpg
我们从这段话中,我们可以知道以下几个信息
1.缓冲输入流创建的时候,内部会创建一个缓冲区
2.它会记录我们读入的字节,保证不会出现重复和漏读的情况
看看构造函数

BufferedInputStream构造.jpg
需要我传入一个输入流
看看内部方法

方法.jpg
这里需要注意几个方法
avilable():清楚我们的输入流还有多少字节可以输入
read():把文件读入到进数组
实例
利用缓冲区,实现一张图片的复制
import java.io.*;
public class IOMain {
public static void main(String[] args) throws Exception{
}
public static void BuffereTest() {
BufferedInputStream bis=null;
BufferedOutputStream bos = null;
try {
bis=new BufferedInputStream(new FileInputStream("C:\\Users\\Administrator\\Desktop\\IO\\Test.jpg"));
bos=new BufferedOutputStream(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\IO\\TestCopy.jpg"));
int num=0;
byte[] b=new byte[1024];
while((num=bis.read(b))!=-1)
{
bos.write(b);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally {
try {
bis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
bos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
总结
分别用于提升输入流和输出流的效率