全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-08 7 分钟 ✍️ juanwangdev

缓冲流

缓冲流在内存中维护缓冲区,减少磁盘IO次数,提高读写效率。

缓冲流的作用

工作原理

Java
普通流:每次读写 → 直接操作磁盘(慢)
缓冲流:多次读写 → 先存缓冲区 → 一次批量操作磁盘(快)

效率对比

  • 普通流:读取1000个字节 = 1000次磁盘IO
  • 缓冲流:读取1000个字节 ≈ 几次磁盘IO(每次读8KB)

字节缓冲流

类名

  • BufferedInputStream:字节输入缓冲流
  • BufferedOutputStream:字节输出缓冲流

使用方式

Java
// 包装普通流
InputStream is = new FileInputStream("source.txt");
BufferedInputStream bis = new BufferedInputStream(is);

OutputStream os = new FileOutputStream("target.txt");
BufferedOutputStream bos = new BufferedOutputStream(os);

// 简洁写法
BufferedInputStream bis = new BufferedInputStream(
    new FileInputStream("source.txt")
);

读写操作

Java
BufferedInputStream bis = new BufferedInputStream(
    new FileInputStream("source.jpg")
);
BufferedOutputStream bos = new BufferedOutputStream(
    new FileOutputStream("target.jpg")
);

byte[] buffer = new byte[1024];
int len;
while ((len = bis.read(buffer)) != -1) {
    bos.write(buffer, 0, len);
}
bos.flush();  // 确保数据写入
bis.close();
bos.close();

字符缓冲流

类名

  • BufferedReader:字符输入缓冲流
  • BufferedWriter:字符输出缓冲流

特有方法

方法说明
readLine()读取一行文本(BufferedReader)
newLine()写入换行符(BufferedWriter)

使用示例

Java
// 按行读取文本
BufferedReader br = new BufferedReader(
    new FileReader("test.txt")
);
String line;
while ((line = br.readLine()) != null) {
    System.out.println(line);
}
br.close();

// 按行写入文本
BufferedWriter bw = new BufferedWriter(
    new FileWriter("test.txt")
);
bw.write("第一行");
bw.newLine();  // 写入换行
bw.write("第二行");
bw.close();

readLine()返回String,读到末尾返回null,不包含换行符。

缓冲区大小

默认大小

  • 字节缓冲流:8KB(8192字节)
  • 字符缓冲流:8KB字符

自定义大小

Java
// 指定缓冲区大小
BufferedInputStream bis = new BufferedInputStream(
    new FileInputStream("test.txt"),
    16 * 1024  // 16KB缓冲区
);

缓冲流是包装流

特点

  • 不能直接连接数据源
  • 必须包装在节点流之上
  • 关闭外层缓冲流会自动关闭内层流

包装关系

Java
数据源 → 节点流 → 缓冲流 → 程序
(文件) → FileInputStream → BufferedInputStream → read()
Java
// 关闭缓冲流即可,内部流自动关闭
BufferedReader br = new BufferedReader(new FileReader("test.txt"));
// ...
br.close();  // FileReader也会被关闭

最佳实践

文件复制示例

text
// 高效复制文件
try (
    BufferedInputStream bis = new BufferedInputStream(
        new FileInputStream("source.jpg")
    );
    BufferedOutputStream bos = new BufferedOutputStream(
        new FileOutputStream("target.jpg")
    )
) {
    byte[] buffer = new byte[8192];
    int len;
    while ((len = bis.read(buffer)) != -1) {
        bos.write(buffer, 0, len);
    }
}

按行读取示例

text
try (BufferedReader br = new BufferedReader(new FileReader("test.txt"))) {
    List<String> lines = br.lines().collect(Collectors.toList());
}

要点总结

  • 缓冲流减少IO次数,提高效率
  • 字节缓冲流:BufferedInputStream/BufferedOutputStream
  • 字符缓冲流:BufferedReader/BufferedWriter
  • BufferedReader.readLine()读取一行
  • BufferedWriter.newLine()写入换行
  • 缓冲流是包装流,必须包装节点流
  • 默认缓冲区8KB,可自定义
  • 关闭缓冲流自动关闭内层流

📝 发现内容有误?点击此处直接编辑

← 上一篇 文件与流的概念
下一篇 → 转换流
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库