【发布时间】:2014-03-31 11:11:24
【问题描述】:
我在SO阅读了这些文章:
Externalizable or Serializable?,
What is the difference between Serializable and Externalizable in Java?.
但我的问题是,与 serializable 相比,通过实施 Externalizable 可以获得哪些额外的自定义。
通过提供我们自己的writeObject 和readObject 实现,可以自定义实现Serializable 的class 的Serialization。那么使用Externalizable 并自定义ReadExternal 和writeExternal 实现的目的是什么。使用Externalizable 的真正好处是什么?我读过各种链接,上面写着Externalizable 支持自定义serialization(包括上面的那个)。但我没有看到Externalizable 是明显赢家的例子,或者使用Serializable 无法完成的事情。很高兴看到一个例子。
为了更清楚起见,以下 sn-p 是从here 中提取的:
当class 实现Serializable interface 时,它会向JVM 提供这些classes 中的instances 可以序列化的信息。除此之外,JVM 有一个特别说明
“在实现Serializable的类中查找以下两个方法。如果找到,则调用它并继续序列化过程,否则直接遵循标准序列化协议”
所以这给了我们写这两个方法的机会:
private void writeObject(ObjectOutputStream out) throws IOException;,
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException;
在实现Serializable 的Class 内部,您将获得serialization 进程的挂钩。您可以在这两个方法中编写自定义代码,并自定义serialization 的标准行为。
【问题讨论】:
标签: java serialization serializable externalizable