java反序列化serialVersionUID不一致问题及解决
作者:sinat_28114651
文章主要讨论了在Java中序列化和反序列化过程中遇到的问题,特别是当实体类的`serialVersionUID`发生变化或未设置时,以及实体类属性有变更时,文章提出了解决方法,通过实现`ObjectInputStream`类并重写`readClassDescriptor`方法来处理这些问题
前言
serialVersionUID变化后,反序列化失败(实体类的serialVersionUID被修改或没有设置serialVersionUID,实体类属性有变更)
记录遇到的问题,不保证正确。
一、序列化、反序列化

二、解决方法
实现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;
}
}- 使用:

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
