Java I/O 流全解
1. I/O 流是什么?
I/O 流(Input/Output Stream)是 Java 中用于 数据传输 的抽象模型,I 表示输入(读数据),O 表示输出(写数据),流表示数据的连续传输。
本质:程序和数据源(文件、网络、内存、设备等)之间传输数据的通道。
2. I/O 流的应用场景
-
文件读写(文本、二进制文件)
-
网络传输(Socket)
-
数据序列化(对象持久化)
-
进程通信(管道流)
-
内存缓存数据处理(数组流、字符串流)
-
控制台输入输出(
System.in/out)
3. I/O 流的分类
Java I/O 流按不同维度分类:
3.1 按方向
| 类型 | 作用 | 常用类 |
|---|---|---|
| 输入流(InputStream / Reader) | 从数据源读数据到程序 | FileInputStream, BufferedReader |
| 输出流(OutputStream / Writer) | 从程序写数据到目标 | FileOutputStream, BufferedWriter |
3.2 按处理单位
| 类型 | 作用 | 常用类 | 场景 |
|---|---|---|---|
| 字节流(InputStream / OutputStream) | 按字节处理数据 | FileInputStream, FileOutputStream | 二进制文件(图片、音视频) |
| 字符流(Reader / Writer) | 按字符处理数据(自动编码/解码) | FileReader, FileWriter | 文本文件(TXT、CSV、JSON) |
3.3 按功能
| 类型 | 作用 | 常用类 | 场景 |
|---|---|---|---|
| 节点流(直接连接数据源) | 直接读写数据源 | FileInputStream、FileReader | 直接访问文件、内存 |
| 处理流(套在节点流外) | 增强功能 | BufferedReader、DataInputStream | 缓冲、数据类型读写 |
4. 核心 I/O 流体系结构
字节流 字符流
输入流 InputStream Reader
输出流 OutputStream Writer
5. 字节流(Byte Streams)
字节流的父类:
-
InputStream(字节输入)
-
OutputStream(字节输出)
示例:文件字节读取与写入
import java.io.*;
public class ByteStreamDemo {
public static void main(String[] args) throws IOException {
// 写入文件
try (FileOutputStream fos = new FileOutputStream("test.bin")) {
fos.write(new byte[]{65, 66, 67}); // 写入 ABC
}
// 读取文件
try (FileInputStream fis = new FileInputStream("test.bin")) {
int b;
while ((b = fis.read()) != -1) {
System.out.print((char) b);
}
}
}
}
📌 应用场景:图片、音频、视频、压缩包等二进制文件。
6. 字符流(Character Streams)
字符流的父类:
-
Reader(字符输入)
-
Writer(字符输出)
示例:文本读取与写入
import java.io.*;
public class CharStreamDemo {
public static void main(String[] args) throws IOException {
// 写入文件
try (FileWriter fw = new FileWriter("test.txt")) {
fw.write("你好,Java IO");
}
// 读取文件
try (FileReader fr = new FileReader("test.txt")) {
int ch;
while ((ch = fr.read()) != -1) {
System.out.print((char) ch);
}
}
}
}
📌 应用场景:TXT、CSV、JSON 等文本文件。
7. 不同输入输出流的使用场景
| 类 | 类型 | 场景 |
|---|---|---|
FileInputStream / FileOutputStream | 字节流 | 二进制文件读写 |
FileReader / FileWriter | 字符流 | 文本文件读写 |
BufferedInputStream / BufferedOutputStream | 缓冲字节流 | 频繁读写二进制文件,提高性能 |
BufferedReader / BufferedWriter | 缓冲字符流 | 按行读取文本文件 |
DataInputStream / DataOutputStream | 数据流 | 读写基本数据类型 |
ObjectInputStream / ObjectOutputStream | 对象流 | 对象序列化与反序列化 |
ByteArrayInputStream / ByteArrayOutputStream | 内存字节流 | 在内存中处理二进制数据 |
StringReader / StringWriter | 内存字符流 | 在内存中处理字符串数据 |
8. 缓冲流(Buffered Streams)
缓冲流是处理流的一种,内部有缓冲区,减少了磁盘 I/O 次数,提高性能。
例:BufferedReader 按行读取文本
import java.io.*;
public class BufferedDemo {
public static void main(String[] args) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader("test.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
}
}
📌 适用场景:
-
文件较大且频繁读取
-
按行读取文本
-
批量写入文件
9. I/O 流选择建议
| 场景 | 推荐类 |
|---|---|
| 文本文件(小/中等大小) | BufferedReader / BufferedWriter |
| 二进制文件 | BufferedInputStream / BufferedOutputStream |
| 按基本类型读写 | DataInputStream / DataOutputStream |
| 对象存储 | ObjectOutputStream / ObjectInputStream |
| 大文件高性能 | Java NIO(Files、Channel) |
10. Java I/O 流分类结构图
┌─────────────── 顶层抽象类 ───────────────┐
│ │
InputStream (字节输入) OutputStream (字节输出)
│ │
┌────────────┴─────────────┐ ┌───────────┴───────────────┐
│ │ │ │
FileInputStream ByteArrayInputStream FileOutputStream ByteArrayOutputStream
BufferedInputStream ObjectInputStream BufferedOutputStream ObjectOutputStream
DataInputStream PipedInputStream DataOutputStream PipedOutputStream
...
┌─────────────── 顶层抽象类 ───────────────┐
│ │
Reader (字符输入) Writer (字符输出)
│ │
┌────────────┴─────────────┐ ┌───────────┴───────────────┐
│ │ │ │
FileReader CharArrayReader FileWriter CharArrayWriter
BufferedReader StringReader BufferedWriter StringWriter
PipedReader InputStreamReader PipedWriter OutputStreamWriter
分类记忆技巧
-
字节流(InputStream / OutputStream)
-
处理二进制数据(图片、音视频等)
-
FileInputStream/FileOutputStream→ 基础文件读写 -
BufferedInputStream/BufferedOutputStream→ 缓冲提高效率 -
DataInputStream/DataOutputStream→ 读写基本类型 -
ObjectInputStream/ObjectOutputStream→ 对象序列化
-
-
字符流(Reader / Writer)
-
处理文本文件(自动编码解码)
-
FileReader/FileWriter→ 基础文本读写 -
BufferedReader/BufferedWriter→ 按行读取/批量写入 -
InputStreamReader/OutputStreamWriter→ 字节与字符转换(可指定编码)
-
-
缓冲流
-
外层包装,提高性能(减少系统 I/O 调用次数)
-
常见:
BufferedReader、BufferedWriter、BufferedInputStream、BufferedOutputStream
-


8万+

被折叠的 条评论
为什么被折叠?



