爲什麼table
字段的Hashtable
序列化,儘管它被標記爲transient
?爲什麼Hashtable的表屬性被序列化?
3
A
回答
7
它被標記爲transient,因爲在Entry陣列上使用默認序列化方案是不安全的。相反,當一個Hashtable被反序列化時,表中的鍵必須重新映射,並且必須根據新的哈希碼值將這些條目添加到槽中。這是必要的,因爲密鑰在反序列化之後可能具有不同的哈希碼......出於各種原因。這項工作將由Hashtable的readObject()
方法完成。
+0
更一般地說,它會削減實現和序列化格式之間的依賴關係,以便在後者保持兼容的同時前者可以更改。你可以看到序列化沒有想到的醜陋黑客。 – 2010-03-26 15:17:12
1
因爲它具有writeObject()
和readObject()
實現(私有方法),它可以控制它如何被序列化和反序列化。它在Java 1.6源代碼中位於800行左右。
查看此Sun advanced serialization guide瞭解詳細信息它是如何工作的「內部」。
1
如果你看一下Hashtable類(至少在1.6)的源代碼,Entry[] table
被標記爲transient
但類實現writeObject()
,其中的條目表的內容寫入ObjectOutputStream
。
因此,哈希表的內容總是被序列化。
他們爲什麼選擇這樣實施?有可能控制數組如何序列化。
相關問題
- 1. 爲什麼我的屬性沒有被序列化,winrt c#xaml
- 2. 爲什麼base class屬性在上一次被序列化?
- 3. 爲SOAP/XML序列化HashTable的最佳方式是什麼?
- 4. Android Hashtable序列化
- 5. 序列化HashTable,Java
- 6. 反序列化包含int列表的屬性作爲屬性
- 7. JSON序列化繼承列表類屬性不會被序列
- 8. 爲什麼wicket頁面被序列化?
- 9. 爲什麼DataContractJsonSerializer不能序列化我的Id屬性?
- 10. JPA:爲什麼存儲序列化形式的屬性不好?
- 11. 爲什麼JSON.stringify不序列化不可枚舉的屬性?
- 12. 使用HashTable屬性序列化對象並存儲在CouchBase中
- 13. 爲什麼UL列表被CSS高度屬性弄亂了?
- 14. 爲什麼JavaBean不能從類型列表<?>序列化一個屬性?
- 15. 屬性沒有被XmlSerializer序列化
- 16. 對象屬性不被反序列化
- 17. XML屬性被反序列化空
- 18. 爲什麼這個類屬性沒有序列化?
- 19. 爲什麼SimpleXML不會反序列化屬性?
- 20. 爲什麼Vector和HashTable被廣泛認爲應該被棄用?
- 21. 如何序列化/反序列化屬性的通用列表?
- 22. C#Xml序列化:序列化類屬性作爲父類的屬性
- 23. 爲什麼Tag屬性不被更新?
- 24. 爲什麼NpgsqlException.ConstraintName屬性被刪除?
- 25. 爲什麼XUnit屬性不被識別?
- 26. 屬性序列化/反序列化
- 27. JSON.NET序列化列表作爲父對象的屬性
- 28. 爲什麼JavaScriptSerializer將屬性解序列化爲默認值或爲零
- 29. 如何排除某些公共屬性被序列化爲JsonResult?
- 30. 類屬性的序列化?
代碼示例和可能的Java版本將有助於回答您的問題。 – msw 2010-03-26 14:56:36
@msw - 不是。任何有Java經驗的人都知道在哪裏可以找到Hashtable的源代碼。 – 2010-03-26 15:06:50