Java 何时使用Externalizable而不是writeReplace+;重新解析?

Java 何时使用Externalizable而不是writeReplace+;重新解析?,java,serialization,Java,Serialization,在一些地方,我使用了writeReplace和readResolve,这有时会变得非常冗长。我想知道使用Externalizable是否会更好(实际上,我不这么认为,因为我的对象基本上是不可变的,但我可能错了)。你能给我一些使用Externalizable的好例子吗?我看不出它们有什么可比性。writeReplace()etc在需要时为案例写入代理对象;Externalizable接管当前对象及其基础对象的整个序列化 您使用writeReplace()的动机是什么?有人告诉我,Externali

在一些地方,我使用了
writeReplace
readResolve
,这有时会变得非常冗长。我想知道使用
Externalizable
是否会更好(实际上,我不这么认为,因为我的对象基本上是不可变的,但我可能错了)。你能给我一些使用
Externalizable
的好例子吗?

我看不出它们有什么可比性。writeReplace()etc在需要时为案例写入代理对象;Externalizable接管当前对象及其基础对象的整个序列化


您使用writeReplace()的动机是什么?

有人告诉我,
Externalizable
比默认序列化快得多,因为它消除了反射开销。使用final字段也可以通过使用
writeReplace
readResolve
解决,因为有不同的原因。最近,我建议某人在序列化包含svg文档的类时使用
writeReplace
,该类(出于任何原因)引用
AWTEventDispatcher
。早些时候我使用它是为了使类映像更紧凑(可能是过早的优化)。我不明白为什么Externalizable通常应该更快。它只允许您自己实现序列化。性能将取决于您的实现。@Sandro我显然假设一个“正常”的实现,它与
Serializable
的实现大致相同,只是没有反射开销。当然,如果你真的想,你可以增加一些开销。一些压缩可能是有意义的(比如一些bloomfilters实现可以做到这一点),但是让我们来比较一下。