2013-02-02 24 views
1

我有一些用於存儲應用程序狀態的類。我需要序列化並從文件中反序列化它。它工作沒有問題。現在,我添加了一個新的瞬態字段,並且,對於源文件,我沒有反序列化我的舊文件。我刪除了這個新的瞬態字段,以便有能力打開舊文件,但我不能再做一次!我得到以下異常:用瞬態字段序列化的例外

com.qqer.fuzzy.app.ApplicationCurrentState;本地類不兼容:stream classdesc serialVersionUID = 6313827182653283573,本地類serialVersionUID = 1

我該如何解決它?我以爲我可以刪除所有新的字段,一切都會好的。

回答

2

更改您的serialVersionUID靜態字段從1到6313827182653283573的價值,因爲這是當你序列化對象時,它具有的值。

這將使反序列化對象成爲可能,前提是該類仍然具有與序列化時完全相同的非瞬態字段(這不可能是真的,因爲從那時起引入或更改了serialVersionUID字段,忘了它)。

+0

它不必具有「完全相同的非瞬態場」,但還有其他限制。請參閱對象序列化規範,對象版本控制章節。 serialVersionUID成員的介紹與它無關,因爲它是靜態的。 – EJP

+0

它與它有關,因爲例外說明本地類的串行版本UID爲1,並且序列化對象的串行版本UID爲6313827182653283573. –

+0

他究竟引入或更改serialVersionUID場證明他的非瞬態場也發生了變化?答:沒有。 – EJP

0

你西港島線幫助serialver設置新版本的所有老班,一切就會OK