如何在 Java 中序列化和反序列化一個物件?


序列化是一個將物件的狀態轉換為位元組流的過程,如果一個類的類或父類實現了 Serializable 或 Externalizable 介面,那麼這個物件就是可序列化的,反序列化是將序列化物件轉換回物件副本的過程。

在序列化期間,如果我們不想使用 transient 關鍵字在位元組流中寫入特定變數的狀態。

當 JVM 遇到 transient 關鍵字時,它會忽略變數的原始狀態並存儲該資料型別(即 int 為 0、byte 為 0、float 為 0.0 等等)的預設值。物件的序列化可以透過 FileOutputStream 和 ObjectOutputStream 類來完成。

示例

import java.io.*;
public class SerializationTest implements Serializable {
   int a = 1, b = 2;
   transient int c = 3;
   public static void main(String[] args) throws Exception {
      SerializationTest obj = new SerializationTest();
      // serialization
      FileOutputStream fos = new FileOutputStream("serialization.txt");
      ObjectOutputStream oos = new ObjectOutputStream(fos);
      oos.writeObject(obj);
      // de-serialization
      FileInputStream fis = new FileInputStream("serialization.txt");
      ObjectInputStream ois = new ObjectInputStream(fis);
      SerializationTest test = (SerializationTest)ois.readObject();
      System.out.println("a = " + test.a);
      System.out.println("b = " + test.b);
      System.out.println("c = " + test.c);
   }
}

輸出

a = 1
b = 2
c = 0 

更新於: 2023 年 12 月 1 日

1K+ 檢視次數

開啟你的 職業生涯

透過完成本課程獲得認證

開始學習
廣告