java.io.InvalidClassException异常解决

  • 1.什么是serialVersionUID
  • 2.java.io.InvalidClassException产生原因?
  • 3.java.io.InvalidClassException解决方案
  • 4.idea推荐插件

1.什么是serialVersionUID

serialVersionUID用作Serializable类中的版本控件。如果您没有显式声明serialVersionUID,JVM将根据您的Serializable类的各个方面自动为您执行此操作,如Java(TM)对象序列化规范中所述。
        序列化运行时将每个可序列化类与版本号相关联,称为serialVersionUID,在反序列化期间使用该版本号来验证序列化对象的发送方和接收方是否已加载与该序列化兼容的该对象的类。如果接收者为具有与相应发送者类的serialVersionUID不同的对象加载了一个类,则反序列化将导致InvalidClassException。
        通俗理解就是serialVersionUID是适用于Java的序列化机制,Java的序列化机制是通过判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常,即是java.io.InvalidClassException。
        serialVersionUID两种生成方式:
        a.显式声明,该字段必须是static,final和long类型:
        private static final long serialVersionUID = 1L;
        b.如果没有显式声明serialVersionUID,JVM将使用自己的算法生成默认SerialVersionUID。

2.java.io.InvalidClassException产生原因?

– Client is using SUN’s JVM in Windows.
– Server is using JRockit in Linux.
The client sends a serializable class with default generated
serialVersionUID (e.g 123L) to the server over socket, the server may
generate a different serialVersionUID (e.g 124L) during deserialization
process, and raises an unexpected InvalidClassExceptions.
(译文如下)

  • 客户端在Windows中使用SUN的JVM。
  • 服务器在Linux中使用JRockit。
    客户端通过套接字向服务器发送带有默认生成的serialVersionUID(例如123L)的可序列化类,服务器可以在反序列化过程中生成不同的serialVersionUID(例如124L),并引发意外的InvalidClassExceptions。

3.java.io.InvalidClassException解决方案

It is strongly recommended that all serializable classes explicitly declare serialVersionUID values, since the default serialVersionUID computation is highly sensitive to class details that may vary depending on compiler implementations, and can thus result in unexpected InvalidClassExceptions during deserialization. Therefore, to guarantee a consistent serialVersionUID value across different java compiler implementations, a serializable class must declare an explicit serialVersionUID value.
(译文如下)
        强烈建议所有可序列化类显式声明serialVersionUID值,因为默认的serialVersionUID计算对类细节高度敏感,这些细节可能因编译器实现而异,因此在反序列化期间可能导致意外的InvalidClassExceptions。因此,为了保证跨不同java编译器实现的一致的serialVersionUID值,可序列化类必须声明显式的serialVersionUID值。

4.idea推荐插件

idea推荐安装使用GenerateSerialVersionUID插件
可参考:https://blog.csdn.net/csdn565973850/article/details/88852454

java.io.InvalidClassException异常解决相关推荐

  1. java.io.InvalidClassException异常解决方案

    java.io.InvalidClassException异常 当我们使用对象序列化流将对象写入到文件中后修改了对象实体类里的属性再读取时就会抛出java.io.InvalidClassExcepti ...

  2. [已解决]报异常java.io.InvalidClassException的解决方法|对象序列化实现Serializable会出现java.io.InvalidClassException的异常

    一.前言 今天在增加完新功能后, 部署的时候,突然就遇到了java.io.InvalidClassException的问题,这些都是我们平常不注意细节造成的后果. 具体异常如下 分析异常:Caused ...

  3. java.io.InvalidClassException异常产生原因及解决方案

    原文地址: https://blog.csdn.net/jeffleo/article/details/70147889 一.异常发生场景 在使用Netty做Android消息推送时,发生了如下异常: ...

  4. caused by java.io.io_疑难杂症之 Error:java.io.InvalidClassException

    当一个类实现了序列化接口,有时会遇到 java.io.InvalidClassException 异常出现: java.io.InvalidClassException: com.test.Test; ...

  5. java.io.InvalidClassException:CartonPrintVO; local class incompatible: stream classdesc serialVersio

    现象: java.io.InvalidClassException:CartonPrintVO; local class incompatible: stream classdesc serialVe ...

  6. 报错:exception is java.io.InvalidClassException

    报错[ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - [BizSeq : ] Servlet.service() for servlet [dispatcher ...

  7. 改动实体类后,报错java.io.InvalidClassException: XXXDTO; local class incompatibl

    报错日志 今天在因项目需求,在DTO实体类中加了个字段就炸了bug错误 java.io.InvalidClassException: com.lenovo.quotation.dto.QuoteSet ...

  8. java.io.InvalidClassException: org.antlr.v4.runtime.atn.ATN; Could not deserialize ATN with UUID……

    0.错误堆栈 Caused by: java.lang.UnsupportedOperationException: java.io.InvalidClassException: org.antlr. ...

  9. pom.xml错误:org.codehaus.plexus.archiver.jar.Manifest.write(java.io.PrintWriter)的解决方法

    pom.xml错误:org.codehaus.plexus.archiver.jar.Manifest.write(java.io.PrintWriter)的解决方法 参考文章: (1)pom.xml ...

最新文章

  1. php计算多元一次方程,C++实现的求解多元一次方程示例
  2. python与excel结合-Python与Excel 不得不说的事情
  3. k8s部署dubbo-admin 2.5.10
  4. CentOS搭建Sqoop环境
  5. 新闻发布项目——实体类(newsTb)
  6. 【飞控理论】【惯性导航基础】什么是欧拉角?为什么会有欧拉角?欧拉角在航空领域的运用?
  7. mysql中间件研究(Atlas,cobar,TDDL,Mycat)
  8. 学python买什么书-书单狗 篇一:小白学Python,到底要看多少书?
  9. TMS320C55x的硬件结构
  10. eclipse 4.3 汉化
  11. 单片机与一般微型计算机相比具有哪些特点,单片机原理与接口技术习题答案
  12. hadoop-bigdata-v2.2 版本shell脚本一键部署 master、slaver1、slaver2三个节点源代码.
  13. x265 HEVC编码器,基于x264 介绍
  14. 计算机的码片是指什么作用,码片速率
  15. 一周消息树:推低端iPhone,将会是苹果必然之举
  16. 原码、反码、补码(Integer.MIN_VALUE、Integer.MAX_VALUE)
  17. 第1讲:进化心理学背景与渊源2
  18. adonis.js mysql_Node.js:Adonis.js 框架 IoC container
  19. json解析工具之jackson的常用实例
  20. BetaFlight深入传感设计之七:GPSBaro高度数据融合

热门文章

  1. 蹦蹦鸟游戏代码-JavaSE版本
  2. 黄芪桂圆枸杞红枣茶的作用
  3. 视频:插入U盘后Win7系统蓝屏,报iusb3xhc.sys
  4. 单页应用首屏加载速度慢怎么解决?
  5. golang开发:WaitGroup Mutex
  6. 多路温度采集控制系统(1)项目介绍
  7. pyspark之sparksql数据交互
  8. Cell Biolabs丨艾美捷Arf1激活检测试剂盒
  9. 无尽学习者修炼指南 v3.0
  10. 我的朋友栅栏的进阶_油漆栅栏,砍伐的木材,拉杂草,植物树-在我的舒适区之外找到极客平衡...