Java 中序列化和外部化的區別


序列化和外部化都是將物件轉換為位元組流並將位元組流儲存在資料庫或記憶體中的過程。實現 java.io.Serializable 介面的類可以被序列化。另一方面,外部化用於根據應用程式需求進行自定義序列化。外部化擴充套件了 java.io.Serializable。

序號關鍵序列化外部化
1
介面
序列化是一個標記介面
外部化包含兩個方法 readExternal 和 writeExternal。
2
實現邏輯
實現該介面的類將序列化或持久化 Java 物件的責任交給 JVM。JVM 使用 readObject 和 writeObject 進行序列化
透過覆蓋 readExternal 和 writeExternal 方法,外部化將實現邏輯控制權提供給應用程式。
3
忽略變數的方式
在序列化中,JVM 在 Java 物件的序列化和反序列化期間會忽略 transient 變數
程式設計師可以編寫自己的邏輯,以在 Java 物件的外部化過程中忽略某些變數
4
效能
可序列化介面使用反射,導致效能相對較慢。
Externalizable 提供對實現方法的完全控制。
5
具有繼承關係的物件序列化
1. 如果超類不可序列化,則子類仍然可以被序列化。
2. 如果子類不可序列化,但超類自動可序列化
我們也可以將此應用於 Externalizable。

Externalizable 示例

class ExternalizableExample implements Externalizable {
   Integer id;
   @Override
   public void writeExternal(ObjectOutput out) throws IOException {
      out.writeInt( id );
   }
   @Override
   public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
      this.id = in.readInt();
   }
}

Serializable 示例

class SerializableExample implements Serializable {
   private static final long serialVersionUID = 5081877L;
   String name;
}

更新於: 2019 年 11 月 18 日

3K+ 次檢視

啟動你的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.