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

字节流与字符流

字节流和字符流是 Java IO 的两大核心体系,适用场景不同。

字节流

FileInputStream/FileOutputStream

Java
// 读取文件
try (FileInputStream fis = new FileInputStream("input.txt")) {
    byte[] buffer = new byte[1024];
    int len;
    while ((len = fis.read(buffer)) != -1) {
        // 处理 buffer
    }
}

// 写入文件
try (FileOutputStream fos = new FileOutputStream("output.txt")) {
    fos.write("Hello".getBytes());
}

适用场景

  • 图片、视频、音频等二进制文件
  • 不涉及编码转换的场景
  • 网络传输数据

字符流

FileReader/FileWriter

Java
// 读取文本文件
try (FileReader fr = new FileReader("input.txt")) {
    char[] buffer = new char[1024];
    int len;
    while ((len = fr.read(buffer)) != -1) {
        // 处理字符
    }
}

// 写入文本文件
try (FileWriter fw = new FileWriter("output.txt")) {
    fw.write("Hello World");
}

InputStreamReader/OutputStreamWriter

指定编码的字符流:

Java
// 指定编码读取
try (InputStreamReader isr = new InputStreamReader(
        new FileInputStream("input.txt"), "UTF-8")) {
    // 读取 UTF-8 编码文件
}

// 指定编码写入
try (OutputStreamWriter osw = new OutputStreamWriter(
        new FileOutputStream("output.txt"), "UTF-8")) {
    osw.write("内容");
}

字节流 vs 字符流

特性字节流字符流
处理单位byte(8位)char(16位)
适用数据二进制数据文本数据
编码处理不处理自动编码转换
基类InputStream/OutputStreamReader/Writer
文件复制✅ 推荐❌ 可能破坏编码

注意:文本文件复制可以用字节流或字符流,但二进制文件(图片、视频)必须用字节流。

文件复制示例

字节流复制(推荐)

Java
try (FileInputStream fis = new FileInputStream("source.jpg");
     FileOutputStream fos = new FileOutputStream("target.jpg")) {
    byte[] buffer = new byte[8192];
    int len;
    while ((len = fis.read(buffer)) != -1) {
        fos.write(buffer, 0, len);
    }
}

字符流复制(仅文本文件)

Java
try (FileReader fr = new FileReader("source.txt");
     FileWriter fw = new FileWriter("target.txt")) {
    char[] buffer = new char[1024];
    int len;
    while ((len = fr.read(buffer)) != -1) {
        fw.write(buffer, 0, len);
    }
}

要点总结

  • 字节流处理二进制数据,字符流处理文本数据
  • 字符流自动处理编码转换,字节流不处理
  • FileReader/FileWriter 使用默认编码, InputStreamReader/OutputStreamWriter 可指定编码
  • 二进制文件必须用字节流,文本文件两者均可
  • 文件复制推荐使用字节流

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

← 上一篇 NIO
下一篇 → 对象序列化
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

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

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