Java序列化机制中的类版本号问题
内容简单介绍
某些实现了serializable接口的java类中会看到名称为serialVersionUID的静态字段,本文从根本上解释这个字段的含义。
知识铺垫
在java中,类的序列化和反序列化是由jvm实现,当然,不同的jvm可能有不同的实现方式,本文讨论java官方的jvm版本号。
一个类,实现serializable接口之后,就代表开发人员同意此类能够被序列化和反序列化,jvm就获得了序列化和反序列化此类的授权。假设没有实现serializable,而直接进行类的序列化操作,jvm会报出异常。
Serializable是一个标识接口,没有不论什么待实现的方法。
概念
Java序列化机制使用名称为serialVersionUID的long型字段来标志类的版本号。序列化对象时,Jvm会把serialVersionUID的值写到类的序列化数据中;反序列化时,JVM会把对象数据数据中的serialVersionUID与本地对应类的serialVersionUID进行比較,假设值不同样(意味着类的版本号不同),那么报异常InvalidCastException,即:类版本号不正确应,不能进行反序列化。假设类版本号同样,则能够进行反序列化。
值
常见的serialVersionUID的值有两种情况:
一种是固定的一个long型值,比方:
private static final long serialVersionUID = 1L;
private static final long serialVersionUID = 123L;
另外一种是依据类名、接口名、成员方法及属性等生成一个64位的哈希值(ide能够完毕此工作),比方:
private static final long serialVersionUID = xxxxL;
当实现java.io.Serializable接口的类没有显式地定义一个serialVersionUID值时,Java序列化机制会依据编译的Class生成一个serialVersionUID作序列化版本号比較用,一旦class文件有所变动(比方空格、变量名),那么serialVersionUID也会随之变动。
序列化数据和类版本号同样但结构不同
当一个类和它的序列化数据的版本号同样(即serialVersionUID值同样),但类结构不同一时候,反序列化过程遵循下面规则。
Java序列化机制中的类版本号问题的更多相关文章
- Java序列化机制中的类版本问题 serialVersionUID的静态字段 含义
Java序列化机制中的类版本问题 分类: [Java 基础]2014-10-31 21:13 480人阅读 评论(0) 收藏 举报 目录(?)[+] 原文地址:http://yanwu ...
- 从 Java 代码逆向工程生成 UML 类图和序列图
from:http://blog.itpub.net/14780914/viewspace-588975/ 本文面向于那些软件架构师,设计师和开发人员,他们想使用 IBM® Rational® Sof ...
- 并发之java.util.concurrent.atomic原子操作类包
15.JDK1.8的Java.util.concurrent.atomic包小结 14.Java中Atomic包的原理和分析 13.java.util.concurrent.atomic原子操作类包 ...
- JAVA中封装JSONUtils工具类及使用
在JAVA中用json-lib-2.3-jdk15.jar包中提供了JSONObject和JSONArray基类,用于JSON的序列化和反序列化的操作.但是我们更习惯将其进一步封装,达到更好的重用. ...
- Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式)
Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式) 原文地址:http://alanland.iteye.com/admin/blogs/1600685(欢迎转载 ...
- 【原】Java学习笔记031 - 常用类
package cn.temptation; public class Sample01 { public static void main(String[] args) { /* * 类 Math: ...
- Java中几个常用类
1.1 包装类 把八大基本数据类型封装到一个类中,并提供属性和方法,更方便的操作基本数据类型. 包装类的出现并不是用于取代基本数据类型,也取代不了. 包装类位于java.lang包中 Number 类 ...
- Java 基础 常用API (Object类,String类,StringBuffer类)
Java API Java 的API(API: Application(应用) Programming(程序) Interface(接口)) Java API就是JDK中提供给我们使用的类,这些类将底 ...
- Java的StringBuffer和StringBuilder类
StringBuffer (字符串缓冲对象) 概念:用于表示可以修改的字符串,称为字符串缓冲对象 作用:使用运算符的字符串将自动创建字符串缓冲对象 例如: str1+str2的操作,实际上是把str1 ...
随机推荐
- Method for address space layout randomization in execute-in-place code
The present application relates generally to laying out address space for execute-in-place code and, ...
- 洛谷 P2655 2038年问题
P2655 2038年问题 题目描述 网络时代,机会与危机共存.“千年虫”解决之后,会不会有新的“虫”出现?回答是肯定的,“2038年”就是一个新的关卡. 也许大家都已经知道计算机的2000年问题是什 ...
- AutoCAD 出现“安全系统(软件锁许可管理器)不起作用或未正确安装”的解决方法
感谢高飞鸟提供解决方案.当AutoCAD或自动桌子公司的其它产品在启动过程中突然停电或其它原因造成操作系统重启时,可能会造成这些产品的许可出错而无法再运行.一般出错后第一次进入时,会提示你“产品需要激 ...
- ontouch、dispatchtouchevent、interceptouchevent-相关事件
这几天一直在研究onTouch的相关方法,今天我们就来看看onTouchEvent.dispatchTouchEvent.onIntercepTouchEvent这三个方法在控件之间的传递顺序 pub ...
- String字符串操作--切割,截取,替换,查找,比较,去空格.....
字符串拼接 直接用+号:String a = "I"; String b = "love"; String c = "you";String ...
- 启动Tomcat,startup.bat一闪而过的解决办法
1.打开命令行:win+R --> cmd2.将解压后的tomcat\bin\startup.bat文件拖到控制台窗口中,回车. 这样就可以看到错误信息的提示,根据提示修改即可.
- (转)看懂类图——UML类图基础
类图 要学懂设计模式,就需要先看得懂类图,类与类之间的关系是学习设计模式的基础,而在软件工程中,类与类之间的关系是通过UML中的类图来体现. 这篇笔记包含的不会是类图的所有东西,包含的只是各个类之间的 ...
- Android界面相关的类
Android界面相关的类 Window Activity的显示界面对象,并作为顶层View被加入到WindowManager中.Window提供了标准的UI显示策略:界面背景.标题区域.默认的事件处 ...
- Source Insight 3.50.0065使用详解
转自calvinlee1984 Subject:Source Insight3.50.0065使用详解 Date: 21-Oct-2011 By: Calvinlee1984@ ...
- std::的概念与作用
std:: 当中std是名称空间,防止反复.比如说很多人给函数取名可能都叫f1():你使用的时候就可能造成问题.如果各人均把自己的f1()放进自己的名称空间.我们在使用的时候带上名称空间就不会有问题. ...