应该都在知道,当我们要将java对象存在在本地,或者从本地读取到内存中该对象的类必须实现serializable接口,其实该接口中没有任何方法的声明看,只是作为一个可被jvm特殊处理的标志,每一个实现该接口的类都有一个UID(stream unique identifier
)作为该类的唯一标志,这个UID是通过类名、方法名等诸多因素计算出来的,它和该类是一一对应的关系。如若UID不对应那么就无法实现反序列化了。会出现如下异常
java.io.InvalidClassException: com.java.model.User; local class incompatible: stream classdesc
serialVersionUID = -405990810656876143, local class serialVersionUID = 875403040358241326
由上面可知,当我向本地序列化对象之后,尽量不要向
已经被序列化的类中添加或者删除相关字段或者方法
,如若必须要改动则需重新进行序列化操作。
另一种情况容易出现UID不一致的情况就是在做分布式的时候,由于UID在没有指定的时候是jvm根据类的相关属性自动生成的,所以选择相同的jvm是前提,所以在做分布式的时候尽量要选取相同的jvm
分享到:
相关推荐
java.io.Serializable序列化问题
序列化 serializable demo ! 序列化 serializable demo !
說明如何將Serializable物件轉成stream
Serializable的增删改查操作,已经经过验证,可以直接运行。
java->serializable深入了解 java->serializable深入了解 java->serializable深入了解
Laravel开发-serializable-values Luminark可序列化值包。
Intent传递数据是android开发中最长用的数据传递方式,可是要传递对象不怎么常用,这里介绍第一种传递对象的方法Serializable传递
Java_Serializable(序列化) 的理解和总结
Android序列化——Serializable与Parcelable
java 序列化 对象 Serializable 写着玩的Demo 简单 实用
bundle传递基本数据,Parcelable类型数据,Serializable类型数据
详细讲解了C#中关于对象序列化的知识,包括基本序列化、选择序列化、自定义序列化;对于了解在C#中如何进行对象的序列化有价值
java 将对象序列化 输出对象的值,不懂可以百度序列化干啥的,为什么要用序列化,好处。
Android中的Serializable
[Serializable]在C_中的作用-NET_中的对象序列化,希望有所帮助
NULL 博文链接:https://tony-lee-s.iteye.com/blog/1416044
java序列化(Serializable)的作用和反序列化.doc 有详细的讲解哦。 在什么地方用的到都有说明的.
Serializable序列化步骤
Java 中 Serializable的应用,序列化的作用说明
主要介绍了Java对象Serializable接口实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下