为什么序列化的table
字段Hashtable
,虽然它被标记为transient
?
问问题
1194 次
3 回答
7
它被标记为瞬态,因为在 Entry 数组上使用默认序列化方案是不安全的。相反,当 Hashtable 被反序列化时,表中的键必须重新散列,并且必须根据新的 hashcode 值将条目添加到槽中。这是必要的,因为在反序列化后密钥可能具有不同的哈希码......出于各种原因。这项工作将通过Hashtable的readObject()
方法来完成。
于 2010-03-26T15:02:49.503 回答
1
因为它具有writeObject()
并readObject()
实现(在私有方法中),它可以控制它如何被序列化和反序列化。它在 Java 1.6 源代码的第 800 行左右。
查看此Sun 高级序列化指南,了解它如何“在幕后”工作的详细信息。
于 2010-03-26T15:00:01.253 回答
1
如果你查看 Hashtable 类的源代码(至少在 1.6 中),它Entry[] table
被标记为transient
但该类实现writeObject()
了 ,其中它将入口表的内容写入ObjectOutputStream
.
因此 Hashtable 的内容总是被序列化的。
他们为什么选择以这种方式实施它?可能控制数组的序列化方式。
于 2010-03-26T15:00:52.503 回答