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;
}
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP