Java反序列化失敗 java.io.InvalidClassException: Serialization.Box; local class incompatible


錯誤

記一次錯誤,在實現對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的固定,但是 ,這需要我們要非常小心的注意類。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM