錯誤
記一次錯誤,在實現對Box類的反序列化的過程中出現了錯誤java.io.InvalidClassException: Serialization.Box; local class incompatible: stream classdesc serialVersionUID = -3710107360465404214, local class serialVersionUID = 1882054695999505670
錯誤的原因是由於UID是不匹配的,JVM拒絕進行反序列化
原因
產生錯誤的原因要從序列化和反序列化來看,當我們進行序列化的時候,序列化的對象會被標記一個類的版本號,就是serialVersionUID,而serialVersionUID是基於class的結構而產生的,所以即使是原本的class,如果對其進行了修改(添加了一個類,一個方法...)都會產生serialVersionUID的變化,而進行反序列化的時候,JVM會比較對象和其class的UID是否相同,如果不相同,JVM就會認為是這個類不是之間進行序列化的類,由此產生錯誤
原因就是當我在進行序列化之后,我對Box類進行了修改,增加了一個變量
我們可以通過命令serialver + 類名
查詢類的UID
修改類前
修改類后
UID出現問題
解決方法
為了實現在序列化之后還能夠對class進行修改的操作的要求,一開始就使用serialver
得到class的UID,然后寫在類中,就能實現UID的固定,但是 ,這需要我們要非常小心的注意類。