何时使用Externalizable而不是writeReplace+readResolve?

5

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

2个回答

1

我看不出它们怎么可比性。writeReplace() 等函数在某些情况下写入一个代理对象;而 Externalizable 则完全接管了当前对象和其基类对象的序列化过程。

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


有不同的原因。最近我建议某人在序列化包含一些SVG文档的类时使用writeReplace,该文档(出于某种原因)引用了AWTEventDispatcher。早些时候,我使用它来使一个类的图像更加紧凑(可能是一种过早的优化)。 - maaartinus

-2
我被告知,Externalizable 比默认序列化快得多,因为它消除了反射开销。使用 writeReplacereadResolve 也可以解决使用 final 字段的问题,就像 我最近意识到的 那样。

我不明白为什么Externalizable通常会更快。它只是允许您自己实现序列化。性能取决于您的实现。 - Sandro
@Sandro,我显然假设有一个“正常”的实现,它执行的操作与Serializable大致相同,只是没有反射开销。当然,如果你真的想要,可以添加一些开销。一些压缩可能是有意义的(据我所知,一些布隆过滤器实现就这样做),但让我们比较同类产品。 - maaartinus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接