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

缓冲流与转换流

缓冲流和转换流是处理流,包装节点流增强功能。

缓冲流

作用

  • 内置缓冲区(默认 8KB)
  • 减少直接 IO 调用次数
  • 大幅提升读写性能

BufferedInputStream/BufferedOutputStream

Java
// 缓冲字节流读取
try (BufferedInputStream bis = new BufferedInputStream(
        new FileInputStream("input.bin"))) {
    byte[] buffer = new byte[1024];
    int len = bis.read(buffer);  // 从缓冲区读取
}

// 缓冲字节流写入
try (BufferedOutputStream bos = new BufferedOutputStream(
        new FileOutputStream("output.bin"))) {
    bos.write(data);        // 写入缓冲区
    bos.flush();            // 手动刷新(必要时)
}  // close() 自动 flush

BufferedReader/BufferedWriter

Java
// 缓冲字符流读取
try (BufferedReader br = new BufferedReader(
        new FileReader("input.txt"))) {
    String line;
    while ((line = br.readLine()) != null) {  // 按行读取
        // 处理每行
    }
}

// 缓冲字符流写入
try (BufferedWriter bw = new BufferedWriter(
        new FileWriter("output.txt"))) {
    bw.write("内容");
    bw.newLine();           // 写入换行符
    bw.flush();             // 手动刷新
}

BufferedReader 特有方法:readLine() 按行读取文本,返回 null 表示读完。

转换流

作用

  • 字节流 → 字符流
  • 指定字符编码

InputStreamReader

Java
// 字节流转字符流,指定编码
try (InputStreamReader isr = new InputStreamReader(
        new FileInputStream("input.txt"), "UTF-8")) {
    char[] buffer = new char[1024];
    int len = isr.read(buffer);
}

// 常用组合:BufferedReader + InputStreamReader
try (BufferedReader br = new BufferedReader(
        new InputStreamReader(
            new FileInputStream("input.txt"), "UTF-8"))) {
    String line = br.readLine();
}

OutputStreamWriter

Java
// 字符流转字节流,指定编码
try (OutputStreamWriter osw = new OutputStreamWriter(
        new FileOutputStream("output.txt"), "UTF-8")) {
    osw.write("中文内容");
}

// 常用组合:BufferedWriter + OutputStreamWriter
try (BufferedWriter bw = new BufferedWriter(
        new OutputStreamWriter(
            new FileOutputStream("output.txt"), "UTF-8"))) {
    bw.write("内容");
}

缓冲区大小选择

Java
// 默认缓冲区 8KB
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("file"));

// 自定义缓冲区大小
BufferedInputStream bis = new BufferedInputStream(
    new FileInputStream("file"), 16384);  // 16KB
文件大小建议缓冲区
小文件(<1MB)8KB(默认)
中等文件16KB~32KB
大文件64KB~128KB

注意:缓冲区过大浪费内存,过小性能提升不明显。一般 8KB~32KB 即可。

要点总结

  • 缓冲流内置缓冲区,减少 IO 调用,提升性能
  • BufferedReader.readLine() 按行读取文本
  • BufferedWriter.newLine() 写入换行符
  • 转换流实现字节流和字符流转换,可指定编码
  • InputStreamReader:字节流 → 字符流
  • OutputStreamWriter:字符流 → 字节流
  • 常用组合:BufferedReader + InputStreamReader(带编码读取)

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

← 上一篇 文件锁与内存映射文件
下一篇 → Java TCP/IP协议
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

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

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