自定义序列化和外化之间的区别?

时间:2017-06-06 16:02:13

标签: java serialization externalizable java-custom-serialization

最近从任何来源,我开始知道自定义序列化是一个我们可以在Serializable类中定义writeObject(ObjectOutputStream os)和readObject(ObjectInputStream is)的过程,这些方法将在序列化时执行,分别进行反序列化以执行我们的功能。

后来,我开始知道Externalization是一个定义2个方法的接口: 1- writeExternal() 2- readExternal()

当我们不想序列化整个对象时,我们的类可以实现Externalizable并覆盖这些方法。这些方法将在序列化和反序列化时执行。

我怀疑为什么我们不能通过实现Serializable并定义writeObject(ObjectOutputStream os)和readObject(ObjectInputStream is)方法来使用自定义序列化,甚至可以序列化对象的某些属性。为什么这种外化进入了画面。

谢谢,

1 个答案:

答案 0 :(得分:0)

在JDK 1.1天期间,Externalizable接口之前引入了

Serializable。在此期间,程序员必须编写对象序列化的确切逻辑,即必须明确写出writeExternal()readExternal()内发生的所有事情。后来介绍Serializable以摆脱这种头痛。

但在某些情况下,使用Externalizable有其自身的优势,因为它允许您定义如何以您自己的方式序列化类,而不是依赖于Java语言API在底层定义的内容。我认为你的班级可能属于这一类。

要回答上一部分中添加的问题,您可以通过将类标记为瞬态来实现对类中成员的选择性序列化。