为什么Hashtable的table属性被序列化?

时间:2010-03-26 14:53:50

标签: java hashtable transient

为什么table的{​​{1}}字段已序列化,但标记为Hashtable

3 个答案:

答案 0 :(得分:7)

它被标记为瞬态,因为在Entry数组上使用默认序列化方案是不安全的。相反,当反序列化Hashtable时,必须重新调整表中的键,并且必须根据新的哈希码值将条目添加到槽中。这是必要的,因为在反序列化之后密钥可能具有不同的哈希码...出于各种原因。这项工作将由Hashtable的readObject()方法完成。

答案 1 :(得分:1)

因为它实现了writeObject()readObject()(在私有方法中),因此可以控制它的序列化和反序列化方式。它是Java 1.6源代码中的第800行。

请查看此Sun advanced serialization guide以了解其工作原理的详细信息。“

答案 2 :(得分:1)

如果你看一下Hashtable类的源代码(至少在1.6中),Entry[] table被标记为transient,但是类实现了writeObject(),其中它写了ObjectOutputStream条目的内容到{{1}}。

因此,Hashtable的内容始终是序列化的。

他们为什么选择以这种方式实施?可能控制阵列的序列化方式。