在Java中,缓冲流(Buffered Stream)是一种特殊的I/O流,它通过引入一个缓冲区来改善读写操作的性能。缓冲流可以在内存中存储数据,这样就可以减少对底层物理设备(如硬盘或网络连接)的访问次数,从而提高效率。
缓冲输入流(Buffered Input Stream)
- 作用:在从底层输入流(如FileInputStream)读取数据时,先将数据缓存到内存中,然后批量读取,减少了系统调用次数。
- 常见类:
BufferedInputStream
,通常包装在一个已存在的输入流之上,例如FileInputStream
、Socket.getInputStream()
等。
// 创建文件输入流并包装成缓冲输入流
FileInputStream fis = new FileInputStream("file.txt");
BufferedInputStream bis = new BufferedInputStream(fis);
// 从缓冲输入流读取数据
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = bis.read(buffer)) != -1) {
// 处理读取的数据
}
// 关闭流
bis.close();
fis.close();
缓冲输出流(Buffered Output Stream)
- 作用:在向底层输出流(如FileOutputStream)写入数据时,先将数据缓存到内存中,然后批量写入,减少了系统调用次数。
- 常见类:
BufferedOutputStream
,通常包装在一个已存在的输出流之上,例如FileOutputStream
、Socket.getOutputStream()
等。
// 创建文件输出流并包装成缓冲输出流
FileOutputStream fos = new FileOutputStream("file.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos);
// 向缓冲输出流写入数据
String data = "Hello, World!";
bos.write(data.getBytes());
// 刷新缓冲区并关闭流
bos.flush();
bos.close();
fos.close();
缓冲字符流(Buffered Character Streams)
除了字节流之外,Java还提供了相应的缓冲字符流,用于处理文本数据:
BufferedReader
和BufferedWriter
分别包装在Reader
和Writer
类上。- 缓冲字符流可以使用方法
readLine()
和write(String)
来按行读写数据。
// 创建文件字符流并包装成缓冲字符流
FileReader fr = new FileReader("file.txt");
BufferedReader br = new BufferedReader(fr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
fr.close();
// 写入数据到文件
FileWriter fw = new FileWriter("file.txt");
BufferedWriter bw = new BufferedWriter(fw);
bw.write("Hello, World!");
bw.newLine(); // 写入换行符
bw.flush();
bw.close();
fw.close();
总的来说,使用缓冲流可以帮助提高I/O操作的性能,特别是在频繁进行小块数据读写的情况下。注意,在完成所有操作后,应确保正确地关闭了所有的流以释放资源。