我有一個簡單的問題,這是不正確的谷歌搜索通過清除相同的serialVersionUID: 如果我安裝了相同的Java二進制到不同的計算機上,將他們的serialVersionUID保持不變?如果不是,那麼除了明確地改變外,是否它們的serialversionUID不同的任何機制?感謝您的解釋。 (這是產生的UID的算法鏈接:algorithm)爲同一安裝的Java版本
回答
是的,因爲serialVersionUIDs只是設置爲靜態值的成員變量,而你沒有重新編譯它們放置到第一臺機器上的二進制文件和第二個。
它是它本身涉及serialVersionUIDs,在運行時序列化/反序列化架構。如果使用serialVersionUID修改類的源代碼,則應該檢查該類與未修改版本的序列化兼容性,如果不兼容,則將serialVerisonUID調整爲該類的尚未使用的值。
如果沒有明確的serialVersionUID設置,JVM將產生一個在運行時,不編譯時 – 2012-01-31 15:57:05
@MarkRotteveel,你說的很對。但是,爲了序列化具有任何意義(或功能),代必須爲非重新編譯的類產生類似結果(除非Java有朝一日狂野,並希望打破向後兼容性)。 – 2012-01-31 16:17:07
這是真的,但你需要自己指定它。據我所知,如果沒有明確設置,計算它的算法依賴於JVM(或者至少它沒有在JLS或JVM規範中指定),因此在不同JVM供應商之間可能會有所不同。 – 2012-02-02 20:57:05
「流唯一標識符是類名稱,接口類名稱,方法和字段的64位散列」 如果您沒有更改類代碼,它應該完全相同。
否則很多功能都會失敗,例如在一臺機器中序列化對象並在其他機器中反序列化(如使用JMS for exmaple) – breezee 2012-01-31 15:37:34
- 1. Pyserial爲不同的python版本安裝
- 2. 同一包的多個安裝版本?
- 3. Wix安裝相同版本
- 4. 在已安裝Lotus Notes其他版本的同一臺計算機上安裝Lotus Notes的不同版本
- 5. Vbscript安裝最新的Java版本
- 6. Java 1.8版本的Maven安裝問題
- 7. 安裝不同版本的VM工具
- 8. 並行安裝不同的ocaml版本
- 9. 安裝不同版本的Python
- 10. 如何安裝不同版本的Android?
- 11. 如何比較不同版本的已安裝java並打印最高版本?
- 12. 在Mountain Lion上安裝不同的Java JDK版本
- 13. 如何刪除Java的舊版本,然後安裝新版本
- 14. 如何卸載較新版本的java並安裝舊版本?
- 15. 不同版本的相同腳本與同一個python安裝的軟件包
- 16. STS安裝Java版本問題
- 17. Maven的:版本:更新父隨後安裝安裝舊版本
- 18. 節點版本衝突|安裝了兩個不同的版本
- 19. 是否有Fiddler的不可安裝版本或同等版本?
- 20. `n latest`安裝一個不同於它所說的版本的版本
- 21. 安裝另一個版本Sails.js本地
- 22. 爲Fedora安裝舊版本的gcc?
- 23. 爲特定版本的python安裝lxml?
- 24. 爲特定版本的Debian安裝g ++
- 25. pip安裝 - 升級pip安裝相同版本
- 26. 安裝和部署 - 在.Net中安裝兩個不同版本
- 27. 在安裝兩個不同的Ruby版本的同時安裝並運行Redmine
- 28. 如何爲不同版本的python安裝龍捲風
- 29. 安裝了兩個版本的Java,哪一個優先?
- 30. npm安裝特定版本不安裝特定版本
你有在源代碼中聲明的serialVersionUID,還是你依靠編譯器來生成它? – Dev 2012-01-31 15:56:07
@Dev我說的是編譯器生成UID – Purushottam 2012-01-31 16:21:54