核心 API:ObjectOutputStream.writeObject() / ObjectInputStream.readObject()。
class Person implements Serializable {
private static final long serialVersionUID = -5809782578272943999L;
int age; String name, sex; /* getter/setter */
}
public class SerializeDemo {
static void serialize() throws IOException {
Person p = new Person(); p.setAge(25); p.setName("gacl"); p.setSex("男");
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("E:/Person.txt"))) {
oos.writeObject(p);
}
}
static Person deserialize() throws IOException, ClassNotFoundException {
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("E:/Person.txt"))) {
return (Person) ois.readObject();
}
}
}
序列化版本號,用於驗證序列化資料與當前類別定義相容性。
InvalidClassException。// v1
class Customer implements Serializable {
static final long serialVersionUID = -5182532647273106745L;
String name; int age;
}
// 序列化存檔
// v2 新增 sex 欄位
class Customer implements Serializable {
static final long serialVersionUID = -5182532647273106745L; // 同 UID
String name; int age; String sex; // 新欄位
}
// 反序列化成功,sex 為 null
實作 Externalizable 需自行實作 writeExternal/readExternal,完全掌控序列化格式與版本邏輯,適合極致效能或特殊協議場景。
serialVersionUID 是序列化相容性的守門員。務必顯式宣告,並隨著類別演進謹慎決定是否變更。