Java中字节流和字符流的区别、使用场景区分、一文详解。

Java 中的 字节流(Byte Stream)字符流(Character Stream) 是两种最基础的 I/O(输入输出)处理方式,

它们各有用途,理解它们对写好文件处理、网络传输、系统交互等代码非常关键。


🧱 一、核心区别

对比点字节流(Byte Stream)字符流(Character Stream)
基类 InputStream / OutputStream Reader / Writer
处理单位 8位字节(byte) 16位字符(char,支持 Unicode)
操作对象 任意数据(图片、音频、视频、压缩包等) 文本文件(支持各种字符编码)
是否处理编码 不处理字符编码,原样读写 自动进行字符集转换(如 UTF-8 转 Unicode)
性能(相对) 更快,适合原始数据 稍慢,适合文本处理

📦 二、使用场景总结

场景推荐使用流类型示例类
读取图片、音频、视频 字节流 FileInputStream
写入 PDF、ZIP 文件 字节流 FileOutputStream
读写 .txt 文本文件 字符流 FileReader / FileWriter
控制台输出字符 字符流 PrintWriter, BufferedWriter
网络传输字节 字节流 Socket.getInputStream()
处理网页文本内容 字符流(配合编码) InputStreamReader + BufferedReader

🧪 三、代码示例对比

1. 字节流读取文件(适合二进制文件)

import java.io.FileInputStream;
import java.io.IOException;

public class ByteStreamExample {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("example.jpg");
        int b;
        while ((b = fis.read()) != -1) {
            System.out.print(b + " ");
        }
        fis.close();
    }
}

 

2. 字符流读取文件(适合文本文件)

import java.io.FileReader;
import java.io.IOException;

public class CharStreamExample {
    public static void main(String[] args) throws IOException {
        FileReader fr = new FileReader("example.txt");
        int c;
        while ((c = fr.read()) != -1) {
            System.out.print((char)c);
        }
        fr.close();
    }
}

 

🎯 四、为什么要区分这两种流?

Java 设计时为了明确分工、提升效率:

  • 处理 原始数据 时(比如图片、视频、网络流量),你不关心字符编码,那就直接用 字节流

  • 处理 文本数据 时(需要考虑编码格式),就应该用 字符流,避免乱码。


 

🧠 五、如何选?

简单口诀:

读写“文本”用字符流,
其他(图片/文件/网络)用字节流!

 

posted @ 2025-07-19 20:41  AlphaGeek  阅读(595)  评论(0)    收藏  举报