當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Java Externalizable用法及代碼示例


外部化服務於自定義序列化的目的,我們可以決定在流中存儲什麽。
java.io 中存在的Externalized 接口用於擴展Serialized 接口的Externalization。它由兩個方法組成,我們必須重寫這些方法才能將對象寫入流或從流中讀取對象,它們是:

// to read object from stream
void readExternal(ObjectInput in) 

// to write object into stream
void writeExternal(ObjectOutput out) 

可序列化和可外部化之間的主要區別

  • Implementation :不像可串行化接口隻需實現接口即可序列化對象中的變量,這裏我們必須明確提及要序列化的字段或變量。
  • Methods :Serialized 是沒有任何方法的標記接口。可外部化接口包含兩個方法:writeExternal()和readExternal()。
  • Process:對於實現 Serialized 接口的類,將發生默認的序列化過程。程序員為實現Externalized接口的類定義序列化過程。
  • 向後兼容性和控製:如果您必須支持多個版本,您可以通過Externalized接口進行完全控製。您可以支持對象的不同版本。如果你實現了Externalized,你就有責任序列化超類。
  • 公共No-arg構造函數:Serialized 使用反射來構造對象,並且不需要無參數構造函數。但外部化需要公共no-arg構造函數。

以下是外部化的示例 -

Java

輸出:

Default Constructor called
The original car is:
Name: Shubham
Year: 1995
Age: 10
The new car is:
Name: Shubham
Year: 1995
Age: 10

在示例中,類 Car 有兩個方法 - writeExternal 和 readExternal。因此,當我們將“Car”對象寫入OutputStream時,會調用writeExternal方法來持久化數據。這同樣適用於 readExternal 方法。
當重建Externalized對象時,首先使用公共無參構造函數創建一個實例,然後調用readExternal方法。因此,必須提供無參構造函數。
當一個對象實現Serialized接口,進行序列化或反序列化時,不會調用對象的構造函數,因此無法完成在構造函數中實現的任何初始化。


相關用法


注:本文由純淨天空篩選整理自佚名大神的英文原創作品 Externalizable interface in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。