最近从任何来源,我开始知道自定义序列化是一个我们可以在Serializable类中定义writeObject(ObjectOutputStream os)和readObject(ObjectInputStream is)的过程,这些方法将在序列化时执行,分别进行反序列化以执行我们的功能。
后来,我开始知道Externalization是一个定义2个方法的接口: 1- writeExternal() 2- readExternal()
当我们不想序列化整个对象时,我们的类可以实现Externalizable并覆盖这些方法。这些方法将在序列化和反序列化时执行。
我怀疑为什么我们不能通过实现Serializable并定义writeObject(ObjectOutputStream os)和readObject(ObjectInputStream is)方法来使用自定义序列化,甚至可以序列化对象的某些属性。为什么这种外化进入了画面。
谢谢,
答案 0 :(得分:0)
Externalizable
接口之前引入了 Serializable
。在此期间,程序员必须编写对象序列化的确切逻辑,即必须明确写出writeExternal()
和readExternal()
内发生的所有事情。后来介绍Serializable
以摆脱这种头痛。
但在某些情况下,使用Externalizable
有其自身的优势,因为它允许您定义如何以您自己的方式序列化类,而不是依赖于Java语言API在底层定义的内容。我认为你的班级可能属于这一类。
要回答上一部分中添加的问题,您可以通过将类标记为瞬态来实现对类中成员的选择性序列化。