关于后端:javaioInvalidClassException-comxxxxxx

33次阅读

共计 843 个字符,预计需要花费 3 分钟才能阅读完成。

InvalidClassException

异样通过

类 A 在零碎应用 ehcache 作为缓存,当初 A 类中新增的一个字段 aa;
新增后启动我的项目后报错:java.io.InvalidClassException: xxx.xxx.xxx; local class incompatible: stream classdesc serialVersionUID = xxx, local class serialVersionUID = xxx;,报错的大略意思是缓存中 serialVersionUID 的与本地类不兼容;
通过查看发现 A 类实现了 Serializable 却没有定义出 serialVersionUID,导致缓存在验证serialVersionUID 时前后不统一抛出异样;

这里须要解释一下:类没有显式申明 serialVersionUID 字段,则 Java 运行时零碎将依据类的各种详细信息主动生成一个serialVersionUID

解决办法

既然原来会生成一个 serialVersionUID,那么咱们获取到原来的serialVersionUID 再给类设置下来,就保障统一了。

通过报错信息外面就能够获取原来的 serialVersionUID
或者通过上面的代码获取

ObjectStreamClass sc = ObjectStreamClass.lookup(A.class);
long ASerialVersionUIDserialID = sc.getSerialVersionUID();
System.out.println("A:" + ASerialVersionUIDserialID);// 这里就是获取到的 serialVersionUID

留神:这里 A 类必须时批改之前的模样,能够通过 git、svn 等工具获取;

还有就是实现了 Serializable 肯定要加上serialVersionUID,没事不要乱动serialVersionUID

private static final long serialVersionUID = XXXL;

正文完
 0