2014-10-20 45 views
-1

我有幾件事情我想要澄清一下:Java對象序列化...它是多餘的和強大的?

當存儲難以存儲的數據時,對象序列化非常方便。你使用一個SerialVersionUUID類,然後你可以閱讀&。如果:

  1. 我在可序列化類中添加一個新變量,以便舊的可序列化對象不具有此變量?它是否仍然會加載並保留未初始化的變量,或者是否會拋出異常,從而使序列化對象無法使用?
  2. 如果我更改SerialVersionUUID,該怎麼辦? 「過時的」序列化對象將不再加載?有沒有一種方法可以輕鬆地轉換它們,或者是否有定製系統來實現這一點?
  3. 如果我改變一個已經存在的變量類型該怎麼辦?可能存在轉場異常?
  4. 是否有節約的大序列化類的方式,如果「模型」(即序列化類)中的數據不會被損壞任何的替代品被改變?

先感謝您的回答這個問題。如果問題不好,我很抱歉。他們剛剛想到我想知道更多關於它的信息。

環顧四周張貼禮儀問多個問題中的一個職位後不禁止也不皺眉。唯一的風險是得到不正確的答案。

回答

1

Java對象序列化...是多餘的

和強大?

它在規範中定義的約束條件下對類的版本控制是相當健壯的。對於「健壯」的任何其他價值,您需要定義您的條款。

  1. 我在序列化類中添加一個新的變量使舊的序列化對象沒有這個變量?它是否仍然會加載並保留未初始化的變量,或者是否會拋出異常,從而使序列化對象無法使用?

它將使變量未初始化。

  1. 如果更改SerialVersionUUID,該怎麼辦?

它會拋出InvalidClassException.

的 「過時」 的序列化對象將不再加載?

見上文。

有沒有一種方法可以很容易地轉換它們,或者是否有定製系統來實現這一點?

不道德:不改變serialVersionUID。與在互聯網上發現的許多善意但不知情的觀點相反,這表明例如在每個修訂版上改變它。 決不改變它,除非你專門希望引起InvalidClassException

  1. 如果我更改已存在的變量類型該怎麼辦?可能存在轉場異常?

它會拋出異常。您不能更改可序列化成員變量的類型。

  • 是否有任何替代儲蓄的方式大可序列化類,如果「模型」(即序列化類)被改變的數據將不會成爲腐敗?
  • 你需要學習Versioning chapter of the Object Serialization Specification,所有這些問題的答案。