我最近閱讀了一條評論,指出使用serialVersionUID爲同一類的不同版本提供兼容的序列化/反序列化不再需要從Java 5開始。它是否正確?也許它與協變返回類型混淆了。所以想和你們一起檢查一下。從Java 5起,不再需要serialVersionUID?
回答
的JavaDocs for Java 5還指出,它需要:
如果一個序列化類沒有顯式聲明的serialVersionUID,則序列化運行時將計算基於類的各個方面該類的默認的serialVersionUID值如Java(TM)對象序列化規範中所述。但是,強烈建議所有可序列化的類顯式聲明serialVersionUID值,因爲默認的serialVersionUID計算對類詳細信息高度敏感,這可能因編譯器實現而異,因此在反序列化期間可能會導致意外的InvalidClassException。因此,要確保跨不同的java編譯器實現保持一致的serialVersionUID值,可序列化的類必須聲明顯式的serialVersionUID值。還強烈建議顯式serialVersionUID聲明儘可能使用private修飾符,因爲這些聲明僅適用於立即聲明的類 - serialVersionUID字段作爲繼承成員是無用的。
即使[Java 7文檔](http://download.oracle.com/javase/7/docs/api/java/io/Serializable.html)也具有相同的免責聲明。 –
從Java 1.4開始,您已經能夠使用XMLEncoder進行序列化,並且忽略了任何serialVersionUID,就像大多數其他序列化庫一樣。
但是,如果使用ObjectOutputStream,則其serialVersionUID的使用沒有改變。
- 1. java serialVersionUID不工作,因爲我需要
- 2. PROVIDE_BACKGROUND權限不再需要?
- 3. 我什麼時候需要更改serialVersionUID?
- 4. Angular2:moduleId不再需要?
- 5. Java可串行化:serialVersionUID的重要性?
- 6. serialVersionUID的值是否重要?
- 7. -moz和-webkit css不再需要?
- 8. serialversionUID不匹配
- 9. 頁面不再需要重定向
- 10. 不需要在Java
- 11. 不需要在Java
- 12. jQuery/kill不再需要時的實例
- 13. 在不再需要DragGestureRecognizer時處理
- 14. Bootstrap Alert不需要再次顯示
- 15. 不再需要快速導入語句
- 16. VB.NET:刪除控件時不再需要
- 17. 不再需要mypackage.app(pid 491):隱藏#16
- 18. 擴展Zepto.js,所以不再需要jQuery
- 19. 爲什麼我們不需要在C#中聲明serialVersionUID(或等價物)?
- 20. Java序列化 - 不兼容serialVersionUID
- 21. 爲什麼我的serialVersionUID後需要一個大括號?
- 22. 需要從iOS SDK 4轉換爲5
- 23. 將自己從Objective C傳遞給C++,不再需要釋放
- 24. 從Windows窗體中刪除標籤時,它不再需要
- 25. Java可外部化的serialVersionUID
- 26. 爲Java類生成SerialVersionUID
- 27. 查詢不再在MySQL 5
- 28. 我需要5分不同的情況
- 29. 在Xcode 5中不需要Quartz Core Import?
- 30. 更新到MVC 5後,IFRAME不再起作用
你能發佈任何相關鏈接嗎? – Santosh
不幸的是我無法訪問該鏈接。內容被刪除是可能的。 – shrini1000