缓冲流

缓冲流,BufferedInputStream,BufferedOutputStream

缓冲流

缓冲流,也叫高效流,是对4个基本的Filexxx流的增强,所以也是4个流,按照数据类型分类:

字节缓冲流:BufferedInputStream,BufferedOutputStream

字符缓冲流:BufferedReader,BufferedWriter

IO 操作是很消耗性能的,缓冲流将数据加载至缓冲区,一次性读取/写入多个字节,从而避免频繁的 IO 操作,提高流的传输效率。

字节缓冲流这里采用了装饰器模式来增强 InputStreamOutputStream子类对象的功能。

字节流和字节缓冲流的性能差别主要体现在我们使用两者的时候都是调用 write(int b)read() 这两个一次只读取一个字节的方法的时候。由于字节缓冲流内部有缓冲区(字节数组),因此,字节缓冲流会先将读取到的字节存放在缓存区,大幅减少 IO 次数,提高读取效率。

字节缓冲流

构造方法

public BufferedInputStream(InputStream in) :创建一个新的缓冲输入流。

**public BufferedOutputStream(OutputStream out)**: 创建一个新的缓冲输出流。

1
2
3
4
// 创建字节缓冲输入流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("bis.txt"));
// 创建字节缓冲输出流
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("bos.txt"));

字符缓冲流

构造方法

**public BufferedReader(Reader in)**:创建一个 新的缓冲输入流。

**public BufferedWriter(Writer out)**: 创建一个新的缓冲输出流。

1
2
3
4
// 创建字符缓冲输入流
BufferedReader br = new BufferedReader(new FileReader("br.txt"));
// 创建字符缓冲输出流
BufferedWriter bw = new BufferedWriter(new FileWriter("bw.txt"));

public void newLine():java.io.BufferedWriter 类的方法之一。这个方法用于写入一个行分隔符到输出流中,具体的行分隔符由系统属性 line.separator 决定。

1
2
3
4
5
6
7
8
9
10
11
12
//1.创建字符缓冲输出流对象,构造方法中传递字符输出流
BufferedWriter bw = new BufferedWriter(new FileWriter("code\\10_IO\\c.txt"));
//2.调用字符缓冲输出流中的方法write,把数据写入到内存缓冲区中
for (int i = 0; i < 10 ; i++) {
bw.write("传智播客");
//bw.write("\r\n");
bw.newLine();
}
//3.调用字符缓冲输出流中的方法flush,把内存缓冲区中的数据,刷新到文件中
bw.flush();
//4.释放资源
bw.close();

public String readLine():java.io.BufferedReader 类的方法之一。这个方法用于从输入流中读取一行文本数据,并返回一个包含该行数据的字符串。如果到达文件末尾,则返回 null

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//1.创建字符缓冲输入流对象,构造方法中传递字符输入流
BufferedReader br = new BufferedReader(new FileReader("10_IO\\c.txt"));

//2.使用字符缓冲输入流对象中的方法read/readLine读取文本

String line = br.readLine();
System.out.println(line);
line = br.readLine();
System.out.println(line);
line = br.readLine();
System.out.println(line);
line = br.readLine();
System.out.println(line);

/*
发下以上读取是一个重复的过程,所以可以使用循环优化
不知道文件中有多少行数据,所以使用while循环
while的结束条件,读取到null结束
*/
String line;
while((line = br.readLine())!=null){
System.out.println(line);
}

//3.释放资源
br.close();

缓冲流
http://example.com/2023/06/26/Java/JavaIO/4. 缓冲流,BufferedInputStream,BufferedOutputStream/
作者
PALE13
发布于
2023年6月26日
许可协议