未显式指定serialVersionUID

当没有显式地定义serialVersionUID变量时,Java序列化机制会根据编译的class自动生成一个serialVersionUID作序列化版本,它通过类名,方法名等诸多因素经过计算而得,和类名、实例方法名、实例属性名等有关,和静态属性名和值、实例属性值无关。

这种情况下,如果class文件(类名,方法名等)没有发生变化(增加空格,换行,增加注释,等等),就算编译再多次,serialVersionUID也不会变化的。但一旦变化,那么在反序列化时就会出现序列化版本不一致的异常InvalidCastException

反序列化过程

  1. 首先,载入需要反序列化的byte[]数组,并解析出类名全路径,jvm会使用URLClassLoader去找本虚拟机中是否加载过这样类名的一个类;

  2. 如果有,计算这个类的serialVersionUID值(如果显示声明了就不用计算,直接用),再和byte[]数组中的serialVersionUID对比,不相同报出异常;

  3. 当相同时,根据刚刚得到的类名全路径newInstance一个对象出来,然后使用反射将byte内容一一复制给该对象,最后返回该对象。

探析“Java序列化”之serialVersionUID相关推荐

  1. Java序列化之serialVersionUID

    Java序列化之serialVersionUID 今天讲一讲Java对象中的serialVersionUID,先从序列化讲起. 什么是序列化 序列化,简单的说,就是将一个对象转化(编码)成可以传输的输 ...

  2. java 序列化 uid_一文看懂Java序列化之serialVersionUID

    serialVersionUID适用于Java的序列化机制.简单来说,Java的序列化机制是通过判断类的serialVersionUID来验证版本一致性的.在进行反序列化时,JVM会把传来的字节流中的 ...

  3. hessian java_Hessian和java序列化对比

    java的序列化 ​1.Java序列化的性能经常被吐槽. 2.Java序列化后的数据相对于一些优秀的序列化的工具,还是要大不少,比如probuf,这大大影响存储和传输的效率. 3.Java序列化一定需 ...

  4. java序列化算法透析_Java序列化机制与原理的深入分析

    Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.Java序列化API提供一 ...

  5. java序列化算法透析_Java序列化算法透析

    /** *  轉載請注明作者longdick    http://longdick.iteye.com * */ Java 序列化算法透析 Serialization (序列化)是一種將對象以一連串的 ...

  6. java 四字节uid,Java入门教程-序列化版本号serialVersionUID的作用

    原标题:Java入门教程-序列化版本号serialVersionUID的作用 Java序列化是将一个对象编码成一个字节流,反序列化将字节流编码转换成一个对象.序列化是Java中实现持久化存储的一种方法 ...

  7. java 序列化版本号_序列化版本号serialVersionUID的作用

    原标题:序列化版本号serialVersionUID的作用 Java序列化是将一个对象编码成一个字节流,反序列化将字节流编码转换成一个对象.序列化是Java中实现持久化存储的一种方法:为数据传输提供了 ...

  8. Java序列化的机制和原理

    有关Java对象的序列化和反序列化也算是Java基础的一部分,下面对Java序列化的机制和原理进行一些介绍. Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述 ...

  9. java序列化原理_Java序列化机制和原理

    Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.Java序列化API提供一 ...

最新文章

  1. 2021年6月程序员平均工资 15052,你给行业拖后腿了吗?
  2. 为什么硬盘速度忽快忽慢_C盘装软件会拖慢电脑速度?C盘是不是比其他盘快?...
  3. 怎样用python自动化办公_会python基础,如何学习自动化办公?
  4. Visual Studio 2010 概念型IDE
  5. P6 计算机系统的层次结构
  6. 11.10/11.11/11.12 安装PHP5 11.13 安装PHP7
  7. android word设计模式,word07设计模式
  8. Flutter进阶—铅刀一割
  9. 第四步_安装gcc交叉编译工具
  10. 预知昨天事情不顺,果然碰到两个
  11. 空号检测平台使用说明
  12. 项目(1)——文件压缩
  13. [1] UI原型设计工具Pencil Project 学习系列----- 为什么选择
  14. 计算机组成原理—第4章数值的机器运算
  15. 抑郁症自测量表测试软件,科学网-抑郁症自测量表(SDS)-李侠的博文
  16. emui 4.1 基于android 6.0,【荣耀V8评测】基于Android 6.0的EMUI 4.1_荣耀 V8_手机评测-中关村在线...
  17. 计算机编程课是学什么的,编程是什么课程
  18. android 挂载多个u盘,实现多U盘挂载
  19. 找朋友(斗地主)判断逻辑
  20. 西邮计算机学院楚东方,【校庆68周年寄语】——学生代表

热门文章

  1. 【特征选择】基础知识
  2. 万户OA应变大考验之新员工学习篇
  3. scala数据结构之Maps和Tuples
  4. UIView的属性使用
  5. [PE格式分析] 3.IMAGE_NT_HEADER
  6. 如果测试你的MongoDB应用升级?
  7. 两数相乘结果溢出的判断
  8. java视频教程不同阶段看哪些
  9. linux blind函数,Linux网络编程入门
  10. mysql 指定目录_mysql 更改默认数据目录