前言
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;
}
}- 使用:

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论