簡體   English   中英

為什么Hashtable的table屬性被序列化?

[英]Why is the table attribute of Hashtable serialized?

為什么Hashtabletable字段是序列化的,盡管它被標記為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM