1.1 概述
1.1 缓冲流的分类:
- 缓冲流概述:
- 缓冲流又称为高效流
- 缓冲流的分类:
- 字节缓冲输出流:BufferedOutputStream
- 字节缓冲输入流:BufferedInputStream
- 字符缓冲输出流:BufferedWriter
- 字符缓冲输入流:BufferedReader
- 缓冲流的使用方式和非缓冲流使用方式是一样的,区别在于构造方法不一样。
1.1.2 缓冲流的原理:
- 利用缓冲区数组临时存储多个数据,等 缓冲区数组满了或调用了close方法时一次调用或减少底层资源的调用次数从而提高读写速度。
1.2 字节缓冲流
1.2.1 字节输出缓冲流:
- BufferedOutputStream类概述:
- 继承OutputStream,是字节缓冲输出流,可以往任意类型的文件输出数据。
- BufferedOutputStream类构造方法:
- BufferedOutputStream(OutputStream out)
- 根据字节输出流创建字节缓冲输出流对象。
- 目前可以传递的子类有:FileOutputStream
- 传递谁就提高谁的效率。
- BufferedOutputStream类成员方法:
- write:输出一个字节,一个字节数组
- BufferedOutputStream类使用注意事项:
- 调用缓冲流的write方法输出数据不是直接输出到目标文件中,而是先输出到缓冲区数组中,等缓冲区数组满了或调用了flush或close方法才会将缓冲区数组的数据通过FileOutputStream输出到目标文件中。
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
public class BufferedOutputStreamDemo01 {
public static void main(String[] args) throws Exception {
//创建字节输出流对象并关联目标文件
FileOutputStream fos = new FileOutputStream("H:/aa.txt",true);
//创建字节缓冲输出流对象
BufferedOutputStream bos = new BufferedOutputStream(fos);
//输出一个字节
bos.write(98);
//输出一个字节数组
bos.write("我爱java\r\n".getBytes());
//关闭流释放资源
bos.close();
}
}
效率测试:
import java.io.FileInputStream;
import java.io.FileOutputStream;
/*
普通流:(复制400M的文件)
*/
public class BufferDemo {
public static void main(String[] args) {
//记录开始时间
long start = System.currentTimeMillis();
try(//创建输入流对象并关联源文件
FileInputStream fis = new FileInputStream("H:/jre-9.0.1.zip");
//创建输出流对象并关联目标文件
FileOutputStream fos = new FileOutputStream("H:/copy.zip");
) {
//读写数据
int b;
while ((b=fis.read())!=-1){
fos.write(b);
}
}catch (Exception e){
e.printStackTrace();
}
//记录结束的时间
long end = System.currentTimeMillis();
System.out.println("普通流复制时间:"+(end-start));
}
}
/*
十几分钟过去了...
*/
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
/*
缓冲流:(复制400M的文件)
*/
public class BufferDemo {
public static void main(String[] args) {
//记录开始时间
long start = System.currentTimeMillis();
try(
//创建输入流对象并关联源文件
FileInputStream fis = new FileInputStream("H:/jre-9.0.1.zip");
BufferedInputStream bis = new BufferedInputStream(fis);
//创建输出流对象并关联目标文件
FileOutputStream fos = new FileOutputStream("