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

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 设计时为了明确分工、提升效率:

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

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

🧠 五、如何选?

简单口诀:

读写“文本”用字符流,

其他(图片/文件/网络)用字节流!

🔍 相关推荐