![](/img/trans.png)
[英]Why does a HashTable store the hash value of the key in the table in java
[英]Why is the table attribute of Hashtable serialized?
為什么Hashtable
的table
字段是序列化的,盡管它被標記為transient
?
它被標記為瞬態,因為在Entry數組上使用默認序列化方案是不安全的。 相反,當反序列化Hashtable時,必須重新調整表中的鍵,並且必須根據新的哈希碼值將條目添加到槽中。 這是必要的,因為在反序列化之后密鑰可能具有不同的哈希碼...出於各種原因。 這項工作將由Hashtable的readObject()
方法完成。
因為它實現了writeObject()
和readObject()
(在私有方法中),因此它可以控制它的序列化和反序列化方式。 它是Java 1.6源代碼中的第800行。
查看此Sun高級序列化指南 ,了解其“引擎蓋”下的工作原理。
如果查看Hashtable類的源代碼(至少在1.6中),則Entry[] table
被標記為transient
但該類實現writeObject()
,其中將條目表的內容寫入ObjectOutputStream
。
因此,Hashtable的內容始終是序列化的。
他們為什么選擇以這種方式實施呢? 可能控制陣列的序列化方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.