0

我知道我们可以通过覆盖 readObject() 和 writeObject() 来自定义序列化。但是有什么需要这样做呢?用例 ?

此外,Externalizable 接口也只是提供自定义序列化的一种方式,还是有其他用途?

4

2 回答 2

3

用例,在我的脑海中:

  • 恢复从其他非瞬态变量计算的瞬态变量的值
  • 使用比默认对象更紧凑、更有效的序列化表示
  • 保持与该类的先前版本的向后兼容性

Externalizable 的 javadoc 解释了它的用途。

于 2013-08-18T17:49:19.283 回答
3

一个熟悉的实践例子:HashMap. 它有很多复杂的内部结构,但有一个相当简单的 API,甚至包括自定义参数。如果它使用默认序列化,则必须序列化大量冗余信息:空桶、桶的空部分、数组中的所有索引等。

相反,HashMap它定义了一个简单而直接的序列化形式,它传输所有且不超过在另一端重建它所需的数据。

于 2013-08-18T18:03:48.700 回答