2012-03-23 53 views
0

在向類中添加靜態方法後,我的可序列化類沒有用objectinputstream讀入,這是否是預期的行爲?在javadoc中,它向靜態方法添加一個可序列化的類會產生不兼容性?通過添加靜態方法改變一個可序列化的類,java

+0

如果沒有更多信息,就無法真正診斷您的問題。請張貼一些代碼,並多一些描述問題。 – 2012-03-23 21:30:03

+0

異常在線程「主」java.io.InvalidClassException:本地類不兼容:流classdesc serialVersionUID = 2421933566308851961,本地類serialVersionUID = 6969314805631849195,我所做的只是添加靜態方法,在舊的serialversion uid中添加修復問題 – 2012-03-23 21:57:25

+0

謝謝。這當然意味着Jon Skeet解決了你的問題,這絕不是一個驚喜。 – 2012-03-23 22:03:20

回答

4

在Java對象序列化規範,部分4.6

流唯一標識符是類名,接口類名,方法和字段的64位散列。

...

對於由方法名稱和簽名來分類的每一個非私有方法:

  • 方法的名稱。
  • 該方法的修飾符被寫爲32位整數。
  • 該方法的描述符。

不,我不能工作了它如何能真正打破序列化狀態的兼容性要麼,但是這就是爲什麼它是要麼值得避免了默認的Java二進制序列(如Protocol Buffers總是自己聲明一個serialVersionUid

相關問題