2013-02-11 61 views
1

有人可以告訴我序列化如何爲一個對象工作。我嘗試了谷歌搜索,但因爲這個原因,我總是迷失在細節中。我只需要知道何時序列化一個對象,該對象的類具有私有/公共變量,靜態變量和私有/公共方法。一切都被序列化或只是變量?使用許多將要序列化的方法來傳遞活動是否是一種不良習慣?序列化,在序列化對象中有很多方法是不好的

+1

也許[這篇文章](http://docs.oracle.com/javase/7/docs/platform/serialization/spec/protocol.html)將有所幫助。還有[這裏](http://stackoverflow.com/questions/14730150/how-does-java-serialise-the-implementationsof-methods-within-an-object/14730752#14730752)你有類似的問題。 – Pshemo 2013-02-11 18:17:15

+0

謝謝你..好的鏈接 – Snake 2013-02-11 18:56:37

回答

4

只有對象的狀態被序列化 - 換句話說,這些字段。這些方法本身不是序列化的。但是,生成的版本號也是該狀態的有效部分,並且取決於所用的方法。誠然,您可以使用serialVersionUid字段更改此行爲 - 但這仍然很棘手。

個人而言,我強烈建議使用使用Java二進制序列化 - 它結束了真正相當棘手的管理向後和向前兼容性。還有很多其他的序列化框架可用,這些框架通常比Java序列化需要更多的工作來開始,但最終會變得更具可移植性和可維護性。我個人是Protocol Buffers的粉絲,但我有偏見:)

+0

@LouisWasserman:啊,當然是;)修正。 – 2013-02-11 18:17:50

+0

謝謝,有道理。我只是想確保在使用serialVersionUid的時候,如果我添加了30個方法,它不會使序列化變得複雜或耗時 – Snake 2013-02-11 18:58:14

+0

@Snake:它不會改變存儲的數據,不會。 – 2013-02-11 19:18:46