2012-01-31 115 views
0

我有一個簡單的問題,這是不正確的谷歌搜索通過清除相同的serialVersionUID: 如果我安裝了相同的Java二進制到不同的計算機上,將他們的serialVersionUID保持不變?如果不是,那麼除了明確地改變外,是否它們的serialversionUID不同的任何機制?感謝您的解釋。 (這是產生的UID的算法鏈接:algorithm爲同一安裝的Java版本

+0

你有在源代碼中聲明的serialVersionUID,還是你依靠編譯器來生成它? – Dev 2012-01-31 15:56:07

+0

@Dev我說的是編譯器生成UID – Purushottam 2012-01-31 16:21:54

回答

2

是的,因爲serialVersionUIDs只是設置爲靜態值的成員變量,而你沒有重新編譯它們放置到第一臺機器上的二進制文件和第二個。

它是它本身涉及serialVersionUIDs,在運行時序列化/反序列化架構。如果使用serialVersionUID修改類的源代碼,則應該檢查該類與未修改版本的序列化兼容性,如果不兼容,則將serialVerisonUID調整爲該類的尚未使用的值。

+0

如果沒有明確的serialVersionUID設置,JVM將產生一個在運行時,不編譯時 – 2012-01-31 15:57:05

+0

@MarkRotteveel,你說的很對。但是,爲了序列化具有任何意義(或功能),代必須爲非重新編譯的類產生類似結果(除非Java有朝一日狂野,並希望打破向後兼容性)。 – 2012-01-31 16:17:07

+0

這是真的,但你需要自己指定它。據我所知,如果沒有明確設置,計算它的算法依賴於JVM(或者至少它沒有在JLS或JVM規範中指定),因此在不同JVM供應商之間可能會有所不同。 – 2012-02-02 20:57:05

0

「流唯一標識符是類名稱,接口類名稱,方法和字段的64位散列」 如果您沒有更改類代碼,它應該完全相同。

+0

否則很多功能都會失敗,例如在一臺機器中序列化對象並在其他機器中反序列化(如使用JMS for exmaple) – breezee 2012-01-31 15:37:34

相關問題