为什么table
的{{1}}字段已序列化,但标记为Hashtable
?
答案 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的内容始终是序列化的。
他们为什么选择以这种方式实施?可能控制阵列的序列化方式。