外部化服務於自定義序列化的目的,我們可以決定在流中存儲什麽。
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接口,進行序列化或反序列化時,不會調用對象的構造函數,因此無法完成在構造函數中實現的任何初始化。
相關用法
- Java Executor newWorkStealingPool()用法及代碼示例
- Java Executor privilegedThreadFactory()用法及代碼示例
- Java Executors Callable()用法及代碼示例
- Java Executors defaultThreadFactory()用法及代碼示例
- Java Executors newCachedThreadPool()用法及代碼示例
- Java Executors newFixedThreadPool()用法及代碼示例
- Java Executors newScheduledThreadPool()用法及代碼示例
- Java Executors newSingleThreadExecutor()用法及代碼示例
- Java Enum clone()用法及代碼示例
- Java Enum compareTo()用法及代碼示例
- Java Enum equals()用法及代碼示例
- Java Enum finalize()用法及代碼示例
- Java Enum getDeclaringClass()用法及代碼示例
- Java Enum hashCode()用法及代碼示例
- Java Enum name()用法及代碼示例
- Java Enum ordinal()用法及代碼示例
- Java Enum toString()用法及代碼示例
- Java Enum valueOf()用法及代碼示例
- Java EnumMap containsValue()用法及代碼示例
- Java EnumMap hashCode()用法及代碼示例
- Java EnumMap putAll()用法及代碼示例
- Java EnumSet allOf()用法及代碼示例
- Java Enumeration asIterator()用法及代碼示例
- Java Enumeration hasMoreElements()用法及代碼示例
- Java Enumeration nextElement()用法及代碼示例
注:本文由純淨天空篩選整理自佚名大神的英文原創作品 Externalizable interface in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。