local class incompatible: stream classdesc serialVersionUID = -2897844985684768944, local class serialVersionUID = 7350468743759137184
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的话,会看到一个编译警告:
那么这个变量是干啥的呢?
serialVersionUID是一个用来版本控制的UID。具体可以参考这篇文章《Understand the serialVersionUID》和相关的JSL
这篇随笔为该文章的阅读笔记。
要测试serialversionUID的版本控制功能,很简单。写三个类:
一个序列化类。
一个写对象流的类。
一个读对象流的类。
当被读取的对象和当前的序列化类的UID不同时会报错。例如:
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可能会不同,从而产生错误。所以说采用分布式的技术或者把对象保存到数据库时应该要注意
序列化和反序列化的异常情况
private static final long serialVersionUID = -7755162995496909499L;
解决方式就是在实体bean 中加入上述一行代码。 保证在bean 中增加属性,不会导致,历史序列化对象的反序列化 版本号不一致的情况
demo:
1 alter table `e_ybnsr_zzs_zb_gridlb` add `valid_flag` bigint DEFAULT '0' comment '0 失效 1 有效'
alter table `e_ybnsr_zzs_zb_gridlb` drop valid_flag
local class incompatible: stream classdesc serialVersionUID = -2897844985684768944, local class serialVersionUID = 7350468743759137184的更多相关文章
- 反序列化失败Failed to deserialize --- local class incompatible: stream classdesc serialVersionUID
反序列化失败: java.lang.IllegalStateException: Failed to execute CommandLineRunner at org.springframework. ...
- local class incompatible: stream classdesc serialVersionUID = 4125096758372084309, local class serialVersionUID = 7725746634795906143
local class incompatible: stream classdesc serialVersionUID = 4125096758372084309, local class seria ...
- weblogic:local class incompatible: stream classdesc serialVersionUID
问题:jdk版本不兼容 方法:修改weblogic对应的jdk版本
- Java 异常 —— java.io.InvalidClassException: javax.xml.namespace.QName; local class incompatible
项目中有个 WebService 接口,调试时使用 Main 方法运行,别人的机器上都能运行,就笔者的机器出问题.他们说是RP的问题…… 异常信息: java.io.InvalidClassExcep ...
- java.io.InvalidClassException: com.master.CurrentMessages; local class incompatible:
报错信息如下: java.io.InvalidClassException: com.master.CurrentMessages; local class incompatible: stream ...
- 对象序列化与反序列化local class incompatible
无论eclipse还是idea(默认关闭序列化提示,需手动打开),都可以自动生成相应的序列号,分为两类1L,XXXL. 当然如果不指定,系统也会自动生成,但是存在隐性风险 ,不同的编译器对同一个对象可 ...
- Missing write access to /usr/local/lib/node_modules npm ERR! path /usr/local/lib/node_modules
今天用npm下载yarn,出现Missing write access to /usr/local/lib/node_modules npm ERR! path /usr/local/lib/node ...
- stream classdesc serialVersionUID = -7218828885279815404, local class serialVersionUID = 1.
序列化类时出现的异常! 当某一个类实现java.io.Serializable接口时,该类默认会生成一个private static final long serialVersionUID = 1L; ...
- python 使用嵌套函数报local variable xxx referenced before assignment或者 local variable XXX defined in enclosing scope
情况一: a 直接引用外部的,正常运行 def toplevel(): a = 5 def nested(): print(a + 2) # theres no local variable a so ...
随机推荐
- AtCoder Grand Contest 004
AtCoder Grand Contest 004 A - Divide a Cuboid 翻译 给定一个\(A*B*C\)的立方体,现在要把它分成两个立方体,求出他们的最小体积差. 题解 如果有一条 ...
- android studio gradle dependencies 包存放在哪儿?
在AndroidStudio中的"External Libraries"下有引用的library的列表, 选择某个library右键->"Library Prope ...
- kafka 多线程消费
一. 1.Kafka的消费并行度依赖Topic配置的分区数,如分区数为10,那么最多10台机器来并行消费(每台机器只能开启一个线程),或者一台机器消费(10个线程并行消费).即消费并行度和分区数一致. ...
- java使用POI操作XWPFDocument中的XWPFRun(文本)对象的属性详解
java使用POI操作XWPFDocument中的XWPFRun(文本)对象的属性详解 我用的是office word 2016版 XWPFRun是XWPFDocument中的一段文本对象(就是一段文 ...
- 在Struts2的Action中获得request response session几种方法
转载自~ 在Struts2中,从Action中取得request,session的对象进行应用是开发中的必需步骤,那么如何从Action中取得这些对象呢?Struts2为我们提供了四种方式.分别为se ...
- redis sentinel集群
ip分布情况: sentinel-1/redis 主 10.11.11.5 sentinel-2/redis 从 10.11.11.7 sentinel-3/redis 从 10.11.11.8 ha ...
- 机器学习算法整理(二)梯度下降求解逻辑回归 python实现
逻辑回归(Logistic regression) 以下均为自己看视频做的笔记,自用,侵删! 还参考了:http://www.ai-start.com/ml2014/ 用梯度下降求解逻辑回归 Logi ...
- alertdialog 设置最大高度
设置最大高度,有很多方法,我个人比较喜欢的是下面这种方式 ,这里的view即添加到 view.addOnLayoutChangeListener(new View.OnLayoutChangeList ...
- 【Swift】UILabel的简单操作方法
@IBAction func buttonClick_LabelCtrl(sender: AnyObject) { //定义CGRect来初始化UILable var frame: CGRect = ...
- soj2012.King(有向图+蛋疼得一逼)
Description There are n children in a country marked by integers from 1 to n. They often fight with ...