Java IO 流进阶:字符流与字节流的深度应用
学习目标与重点
掌握字节流与字符流的核心区别,能够根据实际开发场景选择合适的 IO 流实现文件操作。 熟练运用缓冲流提升 IO 操作效率,解决大文件读写的性能问题。 理解转换流的作用,处理不同编码格式的文件读写,避免乱码问题。 重点是流的嵌套使用和资源释放的标准写法,这是实际开发中高频考点和易错点。
字节流与字符流的核心差异
基本概念与设计初衷
字节流以 byte 为基本单位进行数据传输,它可以处理所有类型的文件,比如图片、视频、音频、文本等。 字符流以 char 为基本单位进行数据传输,它专门用于处理文本文件,底层会涉及字符编码的转换。
字节流的核心类是 InputStream 和 OutputStream,字符流的核心类是 Reader 和 Writer。 两者都是抽象类,实际开发中我们使用的是它们的子类,比如 FileInputStream、FileWriter 等。
核心结论:处理非文本文件用字节流,处理文本文件优先用字符流。
代码实操:字节流读写文本文件
- 创建 FileInputStream 对象,关联要读取的文本文件 test.txt
- 定义 byte 数组作为缓冲区,减少 IO 次数
- 读取数据并转换为字符串,输出到控制台
- 关闭流资源,释放文件句柄
import java.io.FileInputStream;
import java.io.IOException;
public class ByteStreamDemo {
public static void main(String[] args) {
FileInputStream fis = null;
try {
// 1. 关联文件路径
fis = new FileInputStream("test.txt");
// 2. 定义缓冲区,大小为 1024 字节(1KB)
byte[] buffer = new byte[1024];
int len; // 记录每次读取的有效字节数
// 3. 循环读取数据
((len = fis.read(buffer)) != -) {
System.out.print( (buffer, , len));
}
} (IOException e) {
e.printStackTrace();
} {
(fis != ) {
{
fis.close();
} (IOException e) {
e.printStackTrace();
}
}
}
}
}


