java反序列化serialVersionUID不一致問題及解決
更新時間:2025年11月21日 14:09:26 作者:sinat_28114651
文章主要討論了在Java中序列化和反序列化過程中遇到的問題,特別是當實體類的`serialVersionUID`發(fā)生變化或未設置時,以及實體類屬性有變更時,文章提出了解決方法,通過實現(xiàn)`ObjectInputStream`類并重寫`readClassDescriptor`方法來處理這些問題
前言
serialVersionUID變化后,反序列化失敗(實體類的serialVersionUID被修改或沒有設置serialVersionUID,實體類屬性有變更)
記錄遇到的問題,不保證正確。
一、序列化、反序列化

二、解決方法
實現(xiàn)ObjectInputStream類,重寫readClassDescriptor方法
class DecompressibleInputStream extends ObjectInputStream {
public DecompressibleInputStream(InputStream in) throws IOException {
super(in);
}
@Override
protected ObjectStreamClass readClassDescriptor() throws IOException, ClassNotFoundException {
ObjectStreamClass resultClassDescriptor = super.readClassDescriptor();
Class localClass;
try {
localClass = Class.forName(resultClassDescriptor.getName());
} catch (ClassNotFoundException e) {
return resultClassDescriptor;
}
ObjectStreamClass localClassDescriptor = ObjectStreamClass.lookup(localClass);
if (localClassDescriptor != null) {
final long localSUID = localClassDescriptor.getSerialVersionUID();
final long streamSUID = resultClassDescriptor.getSerialVersionUID();
if (streamSUID != localSUID) {
try {
Field suid = resultClassDescriptor.getClass().getDeclaredField("suid");
suid.setAccessible(true);
suid.set(resultClassDescriptor, localSUID);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return resultClassDescriptor;
}
}- 使用:

總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
SpringBoot集成mybatis連接oracle的圖文教程
這篇文章主要介紹了Spring Boot集成mybatis連接oracle的圖文教程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02
Java Web開發(fā)中過濾器和監(jiān)聽器使用詳解
這篇文章主要為大家詳細介紹了Java中的過濾器Filter和監(jiān)聽器Listener的使用以及二者的區(qū)別,文中的示例代碼講解詳細,需要的可以參考一下2022-10-10
Java Socket實現(xiàn)猜數(shù)字小游戲
這篇文章主要為大家詳細介紹了Java Socket實現(xiàn)猜數(shù)字小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-09-09

