2013-02-11 58 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