我在几个地方使用了writeReplace
和readResolve
,有时会变得非常冗长。我想知道是否使用Externalizable
可能更好(实际上,我认为不是,因为我的对象大多是不可变的,但我可能是错的)。你能给我一些使用Externalizable
的好例子吗?
我在几个地方使用了writeReplace
和readResolve
,有时会变得非常冗长。我想知道是否使用Externalizable
可能更好(实际上,我认为不是,因为我的对象大多是不可变的,但我可能是错的)。你能给我一些使用Externalizable
的好例子吗?
我看不出它们怎么可比性。writeReplace() 等函数在某些情况下写入一个代理对象;而 Externalizable 则完全接管了当前对象和其基类对象的序列化过程。
你使用 writeReplace() 的动机是什么?
Externalizable
比默认序列化快得多,因为它消除了反射开销。使用 writeReplace
和 readResolve
也可以解决使用 final 字段的问题,就像 我最近意识到的 那样。Serializable
大致相同,只是没有反射开销。当然,如果你真的想要,可以添加一些开销。一些压缩可能是有意义的(据我所知,一些布隆过滤器实现就这样做),但让我们比较同类产品。 - maaartinus
writeReplace
,该文档(出于某种原因)引用了AWTEventDispatcher
。早些时候,我使用它来使一个类的图像更加紧凑(可能是一种过早的优化)。 - maaartinus