外部化服务于自定义序列化的目的,我们可以决定在流中存储什么。
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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。