为什么要有字节缓冲流?
之前学习的四种字节输入输出流,字符输入输出流统称为基本流,他们实现了io流最主要且最基本的操作。
为了完善基本流的操作,java中提供了包装基本流的高级流,高级流就是基本流的衣服,但本质还是基本流。
字节缓冲流提供了缓冲区使数据快速传输,字符流虽然存在8192字节的缓冲区,但java依然设计了字符缓冲流,并在字符缓冲流中提供了一些高效的方法。
public class 拷贝文件 {
public static void main(String[] args) throws IOException {
/*
构造方法
输入流
public BufferedInputStream(InputStream is)
输出流
public BufferedInputStream(OutputStream os)
*/
//1、创建对象
BufferedInputStream bis=new BufferedInputStream(new FileInputStream("/Users/XXX/IdeaProjects/basecode/day02/aaaa/a.txt"));
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("/Users/XXX/IdeaProjects/basecode/day02/aaaa/b.txt"));
//2、写入对象
int ch;
while ((ch=bis.read())!=-1){
bos.write(ch);
}
bos.close();
bis.close();
}
}
public static void main(String[] args) throws IOException {
//创建对象
BufferedInputStream bis=new BufferedInputStream(new FileInputStream("/Users/XXX/IdeaProjects/basecode/day02/aaaa/a.txt"));
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("/Users/XXX/IdeaProjects/basecode/day02/aaaa/b.txt"));
//拷贝(一次多个数据)
byte[] bytes=new byte[1024];
int len;
while((len=bis.read(bytes))!=-1){
bos.write(bytes,0,len);
}
bos.close();
bis.close();
}
字节缓冲流提升效率的原理
内存中的b将缓冲区的字节一个一个搬运到另一个缓冲区
内存中运算速度很快,所以节约了读写中与硬盘打交道的时间
定义的数组实际上是将b容器扩大,一次到手多个数据