Serialization & Deserialization
- Serialization: Chuyển object → byte stream (ghi file, gửi network). Class phải implements
Serializable (marker interface).
- Deserialization: Đọc byte stream → tái tạo object.
transient: field không được serialize (lưu default value).
Ví dụ đầy đủ
import java.io.*;
public class SerializationDemo implements Serializable {
int a = 1;
int b = 2;
transient int c = 3; // không serialize
public static void main(String[] args) throws Exception {
SerializationDemo obj = new SerializationDemo();
// Serialize
try (FileOutputStream fos = new FileOutputStream("serialize.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos)) {
oos.writeObject(obj);
}
// Deserialize
try (FileInputStream fis = new FileInputStream("serialize.txt");
ObjectInputStream ois = new ObjectInputStream(fis)) {
SerializationDemo restored = (SerializationDemo) ois.readObject();
System.out.println("a = " + restored.a); // 1
System.out.println("b = " + restored.b); // 2
System.out.println("c = " + restored.c); // 0 (default int, vì transient)
}
}
}
Kết quả
a = 1
b = 2
c = 0
Lưu ý quan trọng
- Class phải implements
Serializable (hoặc Externalizable).
- Tất cả field non-transient phải serializable (primitive, String, hoặc object cũng implements Serializable).
serialVersionUID: nên khai báo tĩnh private static final long serialVersionUID = 1L; để kiểm soát version.
- Constructor không được gọi khi deserialize (dùng
readObject() nếu cần logic khởi tạo).