Java-IO-缓冲流
高效读写的缓冲流
缓冲流
高效读写,对四种基本流的增强
流程:
创建后 -> JVM -> OS -> 数据的字节
但是区别在于,每次将不再是一个一个返回,放在一个数组内部,一次性返回,增加了效率
分类:
- 字节缓冲流:
BufferedInputStream
,BufferedOutputStream
- 字符缓冲流:
BufferedReader
,BufferedWriter
字节缓冲流
BufferedOutputStream
继承了OutputStream
,
子类继承父类,可以使用父类的方法
包路径
1 | java.io |
构造函数
1 | BufferedOutputStream(OutputStream out) |
步骤:
- 创建
FileOutputStream
对象,构造方法绑定目的地 - 创建
BufferedOutputStream
对象,构造方法中传递FileOutputStream
对象,提高FileOutputStream
对象效率 - 使用
BufferedOutputStream
对象中的方法write
,把数据写入到内部缓冲区中 - 使用
BufferedOutputStream
对象中的flush方法,把内部缓冲区的数据刷新到文件 - 释放资源(会先调用flush方法刷新数据)
1 | FileOutputStream fos = new FileOutputStream("D:\\a.txt"); |
BufferedInputStream
继承了InputStream
,
子类继承父类,可以使用父类的方法
包路径
1 | java.io |
构造函数
1 | BufferedInputStream(InputStream in) |
步骤:
- 创建
FileInputStream
对象,构造方法中绑定要读取的数据源 - 创建
BufferedInputStream
对象,构造函数绑定FileInputStream
对象 - 使用
BufferedInputStream
对象中的方法read
,读取文件 - 释放资源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15FileInputStream fis = new FileInputStream("D:\\a.txt");
BufferedInputStream bis = new BufferedInputStream(fis);
//一个一个字节读取
int len = 0;
while ((len = bis.read()) != -1) {
System.out.println(len);
}
bis.close();
//每次读取1kb
byte[] bytes = new byte[1024];
int len1 = 0;
while ((len1 = bis.read(bytes)) != -1) {
System.out.println(new String(bytes, 0, len1));
}
字节缓冲流复制文件
复制文件速度十分快,远远快于普通的流的速度
1 | //字节缓冲流复制文件 |
字符缓冲流
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
BufferedWriter
字符缓冲输出流,继承父类的所有方法
包路径
1 | java.io |
构造方法
1 | BufferedWriter(Writer out) |
常用方法
1 | void newLine() //throws IOException写入一个行分隔符 |
步骤:
- 创建字符缓冲输出流对象,构造方法中传递字符输出流
- 调用字符缓冲输出流中的方法write,把数据写入到内存缓冲区中
- 调用字符缓冲输出流中的方法flush,把缓冲区数据刷新到文件
- 释放资源
1 | BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\a.txt")); |
BufferedReader
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
包路径
1 | java.io |
构造方法
1 | BufferedReader(Reader in) |
常用方法
1 | public String readLine()throws IOException |
步骤:
- 创建字符缓冲输入流对象,构造方法中传递字符输入流
- 使用字符缓冲输入流对象的方法
read/read line
读取文本 - 释放资源