Java 当serializable中存在读/写对象方法时,为什么外部化

Java 当serializable中存在读/写对象方法时,为什么外部化,java,serialization,deserialization,externalizable,Java,Serialization,Deserialization,Externalizable,我无法澄清我的困惑 之所以使用Externalizable,是因为我们可以使用read/writeExternal方法提供自己(更高效)的序列化反序列化实现。并控制序列化过程 我们还可以使用read/writeObject方法,序列化过程将被该方法覆盖 那么,为什么需要外部化呢 为什么有人更喜欢读/写外部对象而不是读/写对象?只是序列化时的定制 原因在文件中给出 Externalizable接口的writeExternal和readExternal方法由类实现,以使类能够完全控制对象及其超类型的

我无法澄清我的困惑

之所以使用Externalizable,是因为我们可以使用read/writeExternal方法提供自己(更高效)的序列化反序列化实现。并控制序列化过程

我们还可以使用read/writeObject方法,序列化过程将被该方法覆盖

那么,为什么需要外部化呢


为什么有人更喜欢读/写外部对象而不是读/写对象?

只是序列化时的定制

原因在文件中给出

Externalizable接口的writeExternal和readExternal方法由类实现,以使类能够完全控制对象及其超类型的流的格式和内容。这些方法必须显式地与超类型协调以保存其状态这些方法取代了writeObject和readObject方法的定制实现。 对象序列化使用可序列化和可外部化接口。对象持久性机制也可以使用它们。每个要存储的对象都会针对外部化接口进行测试。如果对象支持Externalizable,则调用writeExternal方法。如果对象不支持Externalizable并且实现了Serializable,则使用ObjectOutputStream保存该对象**


您将如何使用
readObject
writeObject
覆盖序列化过程?据我所知,我们可以在readObject中给出我们自己的序列化过程实现,如果存在readObject方法,java将调用它,而不是使用它自己的实现。与writeObject类似。因此,您可以实现自定义的
ObjectOutputStream
ObjectInputStream
?将使用默认的ObjectStream,但所有这些控制和自定义也可以通过读/写Object来实现。什么是额外的Externalizable?@RahulTyagi假设您需要将对象保存到一个文件中,同时必须进行自定义序列化?在这种情况下,writeExternal将用于序列化,writeObject用于将对象写入文件。但只有writeObject可以同时用于这两种情况,不是吗?如果在序列化时不实现Externalizable,并且不需要进一步自定义,则可以使用writeObject。这就是问题所在,如果外部化接口根本不存在,我们会错过什么?我们可以使用读/写对象方法实现所有功能。