1. 程式人生 > >Java: 獲取jar包中某個類的serialVersionUID(序列版本id)

Java: 獲取jar包中某個類的serialVersionUID(序列版本id)

2018.11.02

文章目錄

前言

在《序列化及Java Serializable序列化介面》一文,我介紹了一個case:一個已上線的版本中包含了未定義serialVersionUID序列版本id的類。本文就會講述這類問題上筆者的解決方法,僅供參考。

方法

這個問題的關鍵是,如何保證下一個上線版本能正確地將已儲存的類例項正確反序列化出來。首先JVM是不支援對serialVersionUID不匹配的例項進行反序列化的,所以我們需要做的就是獲取已上線jar包的A類serialVersionUID

序列版本id,這樣在後續版本中,只要保證A類的serialVersionUID與生產環境的保持一致,那麼就能正確地進行序列化和反序列化。

JDK中serialver,就能獲取jar包中某個類的serialVersionUID1。方法如下:

# Windows環境
> serialver -classpath .\publishedPackage.jar package.ClassName
# package.ClassName    private static final long serialVersionUID = -1L 

文至最末,其言也善,這種沒有加serialVersionUID

情況最好還是別出現,自定義serialVersionUID的方法請檢視《序列化及Java Serializable序列化介面》。


  1. How to generate serialVersionUID ↩︎