2009-11-17 50 views
0

當我們對一個對象進行反序列化時,它很難理解,它是如何在某種特定狀態下回顧對象的?它是否包含對象的任何元數據?會序列化對象包含元數據嗎?

+1

如何「同步」與此有關? – BalusC 2009-11-17 13:30:47

+0

對不起,錯誤地鍵入,它的可序列化,現在將編輯..謝謝 – i2ijeya 2009-11-17 13:31:24

+1

序列化規範在這裏(http://java.sun.com/javase/6/docs/platform/serialization/spec/serialTOC.html) – skaffman 2009-11-17 13:36:09

回答

4

當一個對象被序列化時,對象的類會與對象的非瞬態字段的內容一起被寫入到流中。反序列化器將嘗試加載該類(並且有幾種機制可以這樣做),然後填充非瞬態字段。

的協議規範是在這裏:http://java.sun.com/javase/6/docs/platform/serialization/spec/protocol.html

如果「元數據」你指的是在類註釋,那麼不,他們沒有與對象本身序列化,但可以在類。如果你的意思是別的,請描述你的意思。

+0

Reckon每個序列化的對象都有自己的元數據,並通過引用來自流反序列化的數據發生..我在這裏提到的「元數據」是關於對象屬性的信息。 – i2ijeya 2009-11-17 13:42:08

+0

除非您可以根據特定的Java語言功能描述「元數據」,否則答案是「可能」 – kdgregory 2009-11-17 13:54:53

0

在高層次上,序列化流包含對象中的數據和相關類的名稱,以及確保類不會更改的版本號。它使用這些信息來創建對象的新實例,並使用與舊實例相同的數據填充它。它避免了創建對象時的所有常見約束(例如需要調用構造函數)。

人們有一個令人困惑的地方是他們可以認爲類定義本身是序列化的。它不是,只是它包含的數據和足夠的信息來知道當被激活時要重建哪些對象。當對象被反序列化時,它必須與類路徑上的現有類匹配,序列化二進制數據不包含該類。

相關問題