我在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无法完成的事情。如果能看到这方面的例子就好了。
为了更清楚起见,下面的代码片段摘自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的标准行为。
发布于 2014-02-28 05:31:04
Serializable和Externalizable之间的主要区别在于,Serializable会自动为您处理基类。Externalizable将整个工作留给您。
https://stackoverflow.com/questions/22078407
复制相似问题