0

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

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

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

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

谢谢,

4

1 回答 1

0

ExternalizableSerializable在 JDK 1.1 期间在接口之前引入。在那段时间里,程序员必须编写如何序列化对象的确切逻辑,即,将发生在内部的所有内容都必须writeExternal()readExternal()式编写。Serializable后来被介绍来摆脱这个头痛。

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

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

于 2017-06-06T16:12:39.740 回答