`

java.io.InvalidClassException:local class incompatible: stream classdesc serialV

 
阅读更多

local class incompatible: stream classdesc serialVersionUID = 1, local class serialVersionUID = 2427389723552147596

该错产生来自三个原因:

1.没有指定值:BEAN没有指定序列化值即由JDK给出,客户、服务端使用了不同版本的JDK。

=》解决:要使用相同JDK

2.没有指定值:某个类在与之对应的对象已经序列化出去后做了修改,而这个属性值由JVM根据类的相关信息计算,而修改后的类的计算结果与修改前的类的计算结果往往不同,从而造成对象的反序列化因为类版本不兼容而失败。

=》解决:要同时重启应用升级

3.指定值了:客户端BEAN和服务端的BEAN里面序列化值不同。

=》解决:最好指定,在JDK中,可以利用JDK的bin目录下的serialver.exe工具产生这个serialVersionUID,对于Test.class,执行命令:serialver Test。

 

 

 

《谈原型模式还有JAVA克隆还有Transient》时用到对象流,能够被写进对象流的的类都必须标记一个接口序列化。
用eclipse的话,会看到一个编译警告:

The serializable class xxx does not declare a static final serialVersionUID field of type long

 

那么这个变量是干啥的呢?
serialVersionUID是一个用来版本控制的UID。具体可以参考这篇文章《Understand the serialVersionUID》和相关的JSL

这篇随笔为该文章的阅读笔记。

要测试serialversionUID的版本控制功能,很简单。写三个类:

一个序列化类。

一个写对象流的类。

一个读对象流的类。

当被读取的对象和当前的序列化类的UID不同时会报错。例如:

java.io.InvalidClassException:
local class incompatible: stream classdesc serialVersionUID = 1, local class serialVersionUID = 2427389723552147596

 如果不给定一个UID,JVM会自动生成一个。例如上面的错误是产生于下面两段代码:

public class SerialVersionUUIDTest implements Serializable {
    
private static final long serialVersionUID = 1L;

}
public class SerialVersionUUIDTest implements Serializable {

}


默认自动生成的UID,有什么坏处呢?不同环境JVM对同一个类生成的UID可能会不同,从而产生错误。所以说采用分布式的技术或者把对象保存到数据库时应该要注意

分享到:
评论

相关推荐

    java.io.InvalidClassException local class incompatible 处理方法

    java.io.InvalidClassException local class incompatible 序列化的对象需要ID号,故需要手动指定ID号。

    p29814665_122130_Generic.zip

    29448643 JAVA.IO.INVALIDCLASSEXCEPTION: FILTER STATUS: REJECTED 29671623 CVE-2019-2725 26403575 CVE-2016-7103 29667975 CVE-2019-2824 29726561 CVE-2019-2729 29701537 CVE-2019-2827 1.2 Oracle WebLogic ...

    聊天室java可以实现传送文件功能

    Logger.getLogger(ChatClient.class.getName()).log(Level.SEVERE, null, ex); } try{ Socket sock = new Socket(strServerIp,8000); ObjectOutputStream os = new ObjectOutputStream(sock.getOutputStream())...

    超爽的抽屉效果.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    关于学习C语言时写的代码.zip

    C语言诞生于美国的贝尔实验室,由丹尼斯·里奇(Dennis MacAlistair Ritchie)以肯尼斯·蓝·汤普森(Kenneth Lane Thompson)设计的B语言为基础发展而来,在它的主体设计完成后,汤普森和里奇用它完全重写了UNIX,且随着UNIX的发展,c语言也得到了不断的完善。为了利于C语言的全面推广,许多专家学者和硬件厂商联合组成了C语言标准委员会,并在之后的1989年,诞生了第一个完备的C标准,简称“C89”,也就是“ANSI C”,截至2020年,最新的C语言标准为2018年6月发布的“C18”。 [5] C语言之所以命名为C,是因为C语言源自Ken Thompson发明的B语言,而B语言则源自BCPL语言。 1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。

    机械臂论文.doc

    机械臂论文.doc

    S7200 and WINCC flexible.doc

    S7200 and WINCC flexible.doc

    27.大学生体质测试管理系统的设计与实现-Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文

    27.大学生体质测试管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码(含数据库脚本)+开发文档+lw(高分毕设项目) 详细设计文档介绍链接:http://t.csdnimg.cn/jtyYh 内容概要: 系统主要分为系统管理员、教师和用户三个部分,系统管理员主要功能包括首页、个人中心、用户管理、教师管理、体质测试管理、测试报告管理、测试成绩管理、留言板、系统管理;基本上实现了整个大学生体质测试管理系统信息管理的过程。 全套项目源码+详尽文档,一站式解决您的学习与项目需求。 适用人群: 计算机、通信、人工智能、自动化等专业的学生、老师及从业者。 使用场景及目标: 无论是毕设、期末大作业还是课程设计,一键下载,轻松部署,助您轻松完成项目。 项目代码经过调试测试,确保直接运行,节省您的时间和精力。 其他说明: 项目整体具有较高的学习借鉴价值,基础能力强的可以在此基础上修改调整,以实现不同的功能。

    c语言-c语言编程基础之leetcode题解第24题两两交换链表中的节点.zip

    c语言 c语言_c语言编程基础之leetcode题解第24题两两交换链表中的节点

    电子麦克风.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    文字转语音朗读器.txt

    文字转语音朗读器.txt

    C语言学习,语言学习.zip

    C语言诞生于美国的贝尔实验室,由丹尼斯·里奇(Dennis MacAlistair Ritchie)以肯尼斯·蓝·汤普森(Kenneth Lane Thompson)设计的B语言为基础发展而来,在它的主体设计完成后,汤普森和里奇用它完全重写了UNIX,且随着UNIX的发展,c语言也得到了不断的完善。为了利于C语言的全面推广,许多专家学者和硬件厂商联合组成了C语言标准委员会,并在之后的1989年,诞生了第一个完备的C标准,简称“C89”,也就是“ANSI C”,截至2020年,最新的C语言标准为2018年6月发布的“C18”。 [5] C语言之所以命名为C,是因为C语言源自Ken Thompson发明的B语言,而B语言则源自BCPL语言。 1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。

    基于Web的平面设计课程在线学习平台设计与实现-平面设计课程在线学习平台java代码-平面设计课程在线学习平台java代码-代码

    平面设计课程在线学习-平面设计课程在线学习平台-平面设计课程在线学习平台源码-平面设计课程在线学习平台java代码-平面设计课程在线学习平台设计与实现-基于ssm的平面设计课程在线学习平台-基于Web的平面设计课程在线学习平台设计与实现-平面设计课程在线学习网站-平面设计课程在线学习网站源码-平面设计课程在线学习网站java代码-平面设计课程在线学习项目-平面设计课程在线学习项目代码-平面设计课程在线学习系统-平面设计课程在线学习系统源码-平面设计课程在线学习管理系统-平面设计课程在线学习管理系统java代码-平面设计课程在线学习代码 1、技术栈:java,ssm,spring,springmvc,vue,ajax,maven,mysql,MyBatisPlus等 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:SQLyog/Navicat 开发软件:eclipse/myeclipse/idea Maven包:Maven 浏览器:谷歌浏览器 2、系统的实现 用户信息 图片素材 视频素材 摘 要 I 目 录 III 第1章 绪论

    ་基于C+++OpenCV技术实现的动态目标的追踪!源码+使用文档+全部资料(优秀项目).zip

    【资源说明】 ་基于C+++OpenCV技术实现的动态目标的追踪!源码+使用文档+全部资料(优秀项目).zip་基于C+++OpenCV技术实现的动态目标的追踪!源码+使用文档+全部资料(优秀项目).zip་基于C+++OpenCV技术实现的动态目标的追踪!源码+使用文档+全部资料(优秀项目).zip 【备注】 1、该项目是个人高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    DSP实用教程PPT上.ppt

    DSP实用教程PPT上.ppt

    基于Android+OpenCV的司机疲劳检测项目源码+使用文档+全部资料(优秀项目).zip

    【资源说明】 基于Android+OpenCV的司机疲劳检测项目源码+使用文档+全部资料(优秀项目).zip基于Android+OpenCV的司机疲劳检测项目源码+使用文档+全部资料(优秀项目).zip基于Android+OpenCV的司机疲劳检测项目源码+使用文档+全部资料(优秀项目).zip 【备注】 1、该项目是个人高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    标记view.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    Python 入门教程快速学会 Python.docx

    python入门 假设我们有这么一项任务 : 简单测试局域网中的电脑是否连通 . 这些电脑的 ip 范围 从 192.168.0.101 到 192.168.0.200. 思路 : 用 shell 编程 .(Linux 通常是 bash 而 Windows 是批处理脚本 ). 例如 , 在 Windows 上用 ping ip 的命令依次测试各个机器并得到控制台输出 . 由于 ping 通的时候控制台文 本通常是 "Reply from ... " 而不通的时候文本是 "time out ... " , 所以 , 在结果中进行 字符串查找 , 即可知道该机器是否连通 .实现 :Java 代码如下

    临写字帖.zip

    临写字帖.zip

    英飞凌PowerCode软件安装教程

    英飞凌PowerCode软件安装教程,包括下载链接和安装步骤

Global site tag (gtag.js) - Google Analytics