2018.11.02
前言
在《序列化及Java Serializable序列化接口》一文,我介紹了一個case:一個已上線的版本中包含了未定義serialVersionUID序列版本id的類。本文就會講述這類問題上筆者的解決方法,僅供參考。
方法
這個問題的關鍵是,如何保證下一個上線版本能正確地將已存儲的類實例正確反序列化出來。首先JVM是不支持對serialVersionUID
不匹配的實例進行反序列化的,所以我們需要做的就是獲取已上線jar包的A類serialVersionUID
序列版本id,這樣在後續版本中,只要保證A類的serialVersionUID
與生產環境的保持一致,那麼就能正確地進行序列化和反序列化。
JDK中serialver,就能獲取jar包中某個類的serialVersionUID
1。方法如下:
# Windows環境
> serialver -classpath .\publishedPackage.jar package.ClassName
# package.ClassName private static final long serialVersionUID = -1L
文至最末,其言也善,這種沒有加serialVersionUID
情況最好還是別出現,自定義serialVersionUID
的方法請查看《序列化及Java Serializable序列化接口》。