当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。