探析“Java序列化”之serialVersionUID
未显式指定serialVersionUID
当没有显式地定义serialVersionUID变量时,Java序列化机制会根据编译的class自动生成一个serialVersionUID作序列化版本,它通过类名,方法名等诸多因素经过计算而得,和类名、实例方法名、实例属性名等有关,和静态属性名和值、实例属性值无关。
这种情况下,如果class文件(类名,方法名等)没有发生变化(增加空格,换行,增加注释,等等),就算编译再多次,serialVersionUID也不会变化的。但一旦变化,那么在反序列化时就会出现序列化版本不一致的异常InvalidCastException
。
反序列化过程
首先,载入需要反序列化的byte[]数组,并解析出类名全路径,jvm会使用URLClassLoader去找本虚拟机中是否加载过这样类名的一个类;
如果有,计算这个类的serialVersionUID值(如果显示声明了就不用计算,直接用),再和byte[]数组中的serialVersionUID对比,不相同报出异常;
当相同时,根据刚刚得到的类名全路径newInstance一个对象出来,然后使用反射将byte内容一一复制给该对象,最后返回该对象。
探析“Java序列化”之serialVersionUID相关推荐
- Java序列化之serialVersionUID
Java序列化之serialVersionUID 今天讲一讲Java对象中的serialVersionUID,先从序列化讲起. 什么是序列化 序列化,简单的说,就是将一个对象转化(编码)成可以传输的输 ...
- java 序列化 uid_一文看懂Java序列化之serialVersionUID
serialVersionUID适用于Java的序列化机制.简单来说,Java的序列化机制是通过判断类的serialVersionUID来验证版本一致性的.在进行反序列化时,JVM会把传来的字节流中的 ...
- hessian java_Hessian和java序列化对比
java的序列化 1.Java序列化的性能经常被吐槽. 2.Java序列化后的数据相对于一些优秀的序列化的工具,还是要大不少,比如probuf,这大大影响存储和传输的效率. 3.Java序列化一定需 ...
- java序列化算法透析_Java序列化机制与原理的深入分析
Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.Java序列化API提供一 ...
- java序列化算法透析_Java序列化算法透析
/** * 轉載請注明作者longdick http://longdick.iteye.com * */ Java 序列化算法透析 Serialization (序列化)是一種將對象以一連串的 ...
- java 四字节uid,Java入门教程-序列化版本号serialVersionUID的作用
原标题:Java入门教程-序列化版本号serialVersionUID的作用 Java序列化是将一个对象编码成一个字节流,反序列化将字节流编码转换成一个对象.序列化是Java中实现持久化存储的一种方法 ...
- java 序列化版本号_序列化版本号serialVersionUID的作用
原标题:序列化版本号serialVersionUID的作用 Java序列化是将一个对象编码成一个字节流,反序列化将字节流编码转换成一个对象.序列化是Java中实现持久化存储的一种方法:为数据传输提供了 ...
- Java序列化的机制和原理
有关Java对象的序列化和反序列化也算是Java基础的一部分,下面对Java序列化的机制和原理进行一些介绍. Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述 ...
- java序列化原理_Java序列化机制和原理
Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.Java序列化API提供一 ...
最新文章
- 2021年6月程序员平均工资 15052,你给行业拖后腿了吗?
- 为什么硬盘速度忽快忽慢_C盘装软件会拖慢电脑速度?C盘是不是比其他盘快?...
- 怎样用python自动化办公_会python基础,如何学习自动化办公?
- Visual Studio 2010 概念型IDE
- P6 计算机系统的层次结构
- 11.10/11.11/11.12 安装PHP5 11.13 安装PHP7
- android word设计模式,word07设计模式
- Flutter进阶—铅刀一割
- 第四步_安装gcc交叉编译工具
- 预知昨天事情不顺,果然碰到两个
- 空号检测平台使用说明
- 项目(1)——文件压缩
- [1] UI原型设计工具Pencil Project 学习系列----- 为什么选择
- 计算机组成原理—第4章数值的机器运算
- 抑郁症自测量表测试软件,科学网-抑郁症自测量表(SDS)-李侠的博文
- emui 4.1 基于android 6.0,【荣耀V8评测】基于Android 6.0的EMUI 4.1_荣耀 V8_手机评测-中关村在线...
- 计算机编程课是学什么的,编程是什么课程
- android 挂载多个u盘,实现多U盘挂载
- 找朋友(斗地主)判断逻辑
- 西邮计算机学院楚东方,【校庆68周年寄语】——学生代表