Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Serialize và Deserialize đối tượng trong Java

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).