当可以通过重写writeObject()和readObject()进行自定义序列化时,java外部化有什么用途?

当可以通过重写writeObject()和readObject()进行自定义序列化时,java外部化有什么用途?,java,serialization,serializable,externalizable,Java,Serialization,Serializable,Externalizable,我正在学习java序列化,我有一个疑问,如果可以通过重写类中的writeObject()和readObject()方法来定制默认的序列化过程,那么外部化接口的用途是什么?在哪种情况下需要它?它用于自定义序列化,请参阅 主要用途: 更改JVM的默认序列化行为 用例: 如果我们需要序列化整个对象,Serializable接口更适合。另一方面,对于自定义序列化,我们可以使用Externalizable控制进程 可能的性能优势: java.io.Serializable接口使用反射和元数据,这会导致相对

我正在学习java序列化,我有一个疑问,如果可以通过重写类中的writeObject()和readObject()方法来定制默认的序列化过程,那么外部化接口的用途是什么?在哪种情况下需要它?

它用于自定义序列化,请参阅

主要用途:

更改JVM的默认序列化行为

用例:

如果我们需要序列化整个对象,Serializable接口更适合。另一方面,对于自定义序列化,我们可以使用Externalizable控制进程

可能的性能优势:

java.io.Serializable接口使用反射和元数据,这会导致相对较慢的性能。相比之下,Externalizable接口使您能够完全控制序列化过程


它用于自定义序列化,请参见

主要用途:

更改JVM的默认序列化行为

用例:

如果我们需要序列化整个对象,Serializable接口更适合。另一方面,对于自定义序列化,我们可以使用Externalizable控制进程

可能的性能优势:

java.io.Serializable接口使用反射和元数据,这会导致相对较慢的性能。相比之下,Externalizable接口使您能够完全控制序列化过程


从哪里超越?这些未在对象类中定义。如果您想要自定义对象的序列化,那么它应该实现
Externalizable
以通过重写
writeExternal(ObjectOutput out)
readExternal(ObjectInput in)
来自定义序列化,从而使其
可序列化。除非有任何可序列化的对象,否则不能通过网络发送,也不能将其与任何流一起写入文件。如果您尝试这样做,它将抛出不正确的
NotSerializableException
@Nitin。还可以提供自定义的
readObject()/writeObject()
方法,而根本不使用
Externalizable
,这就是问题所在。@OP
Externalizable
使您负责序列化超类的状态,一方面,它没有默认行为,另一方面,user7294900的答案在这种情况下是有效的。有效但毫无用处。副本中的答案更好。从何处覆盖?这些未在对象类中定义。如果您想要自定义对象的序列化,那么它应该实现
Externalizable
以通过重写
writeExternal(ObjectOutput out)
readExternal(ObjectInput in)
来自定义序列化,从而使其
可序列化。除非有任何可序列化的对象,否则不能通过网络发送,也不能将其与任何流一起写入文件。如果您尝试这样做,它将抛出不正确的
NotSerializableException
@Nitin。还可以提供自定义的
readObject()/writeObject()
方法,而根本不使用
Externalizable
,这就是问题所在。@OP
Externalizable
使您负责序列化超类的状态,一方面,它没有默认行为,另一方面,user7294900的答案在这种情况下是有效的。有效但毫无用处。副本中的答案要好得多。