Java中序列化(Serialization)和反序列化(Deserialization)常用方法的易混淆点 解析,一文彻底摆脱混淆。
Java 序列化中的 InputXXX 与 OutputXXX 类总结
这个问题其实非常常见,很多初学 Java 的朋友都会在 InputXXX 和 OutputXXX 类名中搞混,特别是在 序列化(Serialization)和反序列化(Deserialization) 过程中。
如下是总结的一套记忆口诀 + 对照图 + 原理类比,让你以后再也不会混淆。
✅ 一句话记忆法(最关键):
Output 是写出(write),Input 是读入(read)
| 类名 | 作用 | 用途 | 关键词 |
|---|---|---|---|
| ObjectOutputStream | 将对象 写出 到文件 | 序列化 | writeObject() |
| ObjectInputStream | 从文件中 读入 对象 | 反序列化 | readObject() |
🧠 图解:序列化 vs 反序列化
对象 → 字节流 → 文件
(内存) (转码) ("object.ser")
↓ ↓ ↓
ObjectOutputStream → FileOutputStream
文件 → 字节流 → 对象
("object.ser") (解码) (恢复为内存对象)
↓ ↓ ↓
FileInputStream → ObjectInputStream
🔁 类比帮助理解:
| 场景 | 类比说明 |
|---|---|
| Output | 把内存中的数据/对象「输出」成文件,像把水倒入瓶子 |
| Input | 把文件中的数据「输入」到程序中,像从瓶子倒出水 |
✅ 全流程总结模板(背熟这几个类名):
✔️ 序列化(写入文件)用:
// 输出流 - 序列化
FileOutputStream fos = new FileOutputStream("object.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(myObject); // 关键方法
oos.close();
👉 记住顺序:FileOutputStream → ObjectOutputStream → writeObject()
✔️ 反序列化(读取文件)用:
// 输入流 - 反序列化
FileInputStream fis = new FileInputStream("object.ser");
ObjectInputStream ois = new ObjectInputStream(fis);
MyClass obj = (MyClass) ois.readObject(); // 关键方法
ois.close();
👉 记住顺序:FileInputStream → ObjectInputStream → readObject()
🧠 小技巧助记(口诀):
OutputStream:O 开头,像 "Out",输出InputStream:I 开头,像 "In",输入ObjectOutputStream:对象 → 输出 → 写入文件ObjectInputStream:文件 → 输入 → 还原对象
🚫 常见混淆陷阱:
| 错误理解 | 正确理解 |
|---|---|
| ObjectOutputStream 是读对象的 | ❌ 错,它是 写 对象的 |
| ObjectInputStream 是写对象的 | ❌ 错,它是 读 对象的 |
| Input 是“输入文件” | ❌ 错,是从文件中输入到程序 |
| Output 是“输出文件” | ✅ 对,是从程序中输出到文件 |
✅ 如果你要彻底掌握:
你可以这样类比记忆整个 Input / Output 家族:
| 类型 | 字节流 | 字符流 |
|---|---|---|
| 输入(读) | InputStream | Reader |
| 输出(写) | OutputStream | Writer |
| 序列化输入 | ObjectInputStream | N/A |
| 序列化输出 | ObjectOutputStream | N/A |
📌 总结
💡 只要记住:Output 是“输出到文件”,Input 是“输入到程序”,你就不容易混淆。

浙公网安备 33010602011771号