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 是“输入到程序”,你就不容易混淆。

posted @ 2025-08-02 23:06  AlphaGeek  阅读(150)  评论(0)    收藏  举报