序列化对象为什么需要定义serialVersionUID值?

首先,我们先来看看源码是怎么描述的?

   The serialization runtime associates with each serializable class a versionnumber, called a serialVersionUID, which is used during deserialization toverify that the sender and receiver of a serialized object have loadedclasses for that object that are compatible with respect to serialization.If the receiver has loaded a class for the object that has a differentserialVersionUID than that of the corresponding sender's class, thendeserialization will result in an {@link InvalidClassException}.

大概意思是:
序列化运行时与每个可序列化类关联一个版本号,称为 serialVersionUID,在反序列化期间使用该版本号来验证序列化对象的发送方和接收方是否已加载与序列化兼容的该对象的类。
如果接收者为对象加载了一个类,该对象的 serialVersionUID 与相应发送者的类不同,则反序列化将导致 {InvalidClassException}。

总结如下:

  1. SerialVersionUid 是为了序列化对象版本控制,告诉 JVM 各版本反序列化时是否兼容
  2. 如果在新版本中这个值修改了,新版本就不兼容旧版本,反序列化时会抛出InvalidClassException异常
  3. 仅增加了一个属性,希望向下兼容,老版本的数据都保留,就不用修改
  4. 删除了一个属性,或更改了类的继承关系,就不能不兼容旧数据,这时应该手动更新 SerialVersionUid

序列化对象为什么需要定义UID值相关推荐

  1. python 对象序列化 pickling_[Python]对dat文件的操作:序列化对象

    一:dat文件 在我之前的博客中,我介绍了对txt文件操作的一些相关知识,以及如何对其进行读写操作,也介绍了文本文件和二进制文件的一些区别.虽然对txt文件操作已经能够满足储存数据的需求,但txt文件 ...

  2. python学习-序列化对象(pickle)

    文章目录 序列化(pickle) 序列化(pickle) 序列化对象,引入内置模块: import pickle 序列化写文件使用二进制的方式去写,需要使用wb 我在定义时,类成员变量使用了__修饰, ...

  3. python 对象转字典及序列化对象相关问题,__dict__!!!!必看,多坑

    目录 __dict__只能存储实例变量,不能存储类变量 情况一:(可以直接通过__dict__序列化对象) 情况二:(不能直接通过__dict__序列化对象) 情况三:(定义keys和__getite ...

  4. java parcelable list_Android中Serializable和Parcelable序列化对象详解

    学习内容: 1.序列化的目的 2.Android中序列化的两种方式 3.Parcelable与Serializable的性能比较 4.Android中如何使用Parcelable进行序列化操作 5.P ...

  5. 什么是 serialVersionUID ? 序列化对象时必须提供 serialVersionUID 吗?

    什么是 serialVersionUID ? 序列化对象时必须提供 serialVersionUID 吗? 1,什么是 serialVersionUID ? 顾名思义,serialVersionUID ...

  6. servlet里面的context,定义属性值的事情!

    servlet里面的context,定义属性值. 在尚未指定属性值的时候.不管谁调用,都是NULL. 但是,一旦指定了属性值.那么,再次调用就是之间指定的数值啦! 而且,是象mapping一样存储对象 ...

  7. 可以获取python中输出函数帮助的是_Python帮助函数调试函数 用于获取对象的属性及属性值...

    Python帮助函数调试函数 用于获取对象的属性及属性值 刚接触Python,上篇 <Python入门>第一个Python Web程序--简单的Web服务器 中调试非常不方便,不知道对象详 ...

  8. Hessian RPC示例和基于Http请求的Hessian序列化对象传输

    本文主要介绍两个案例,第一个是使用Hessian来实现远程过程调用,第二个是通过Hessian提供的二进制RPC协议进行和Servlet进行数据交互,Hessian本身即是基于Http的RPC实现. ...

  9. Java基础/利用fastjson序列化对象为JSON

    利用fastjson序列化对象为JSON 参考博客:http://blog.csdn.net/zeuskingzb/article/details/17468079 Step1:定义实体类 //用户类 ...

最新文章

  1. [USACO07JAN]平衡的阵容Balanced Lineup BZOJ 1699
  2. 这个陶瓷电阻烙铁架不错哦,最新一期的电子趣事分享给大家
  3. 255.0.0.0子网掩码相应的cidr前缀表示法是?_【洛谷日报#246】浅谈表达式的求值(Vol.2 进阶)...
  4. Oracle执行计划解释
  5. js判断软键盘是否开启弹出
  6. ioca0中断 pic单片机_单片机入门知识-PIC为例程序.ppt
  7. 深度学习——从文件中载入训练数据
  8. 通过JAVA获取优酷视频
  9. 下载Linux版(rpm格式),WPS Office 2019 Linux 11.1.0.9505版提供Deb、Rpm格式包下载
  10. sqli-labs 第八关盲注脚本
  11. Linux系统进程优化理论与方法
  12. 【人工智能】王飞跃教授讲述可解释的神经元网络发展历程
  13. idea 快捷键操作笔记
  14. c语言程序从哪里开始执行
  15. Mybatis笔记(视频是动力节点王妈妈10.5小时)
  16. Node 的单元测试--jasmine
  17. 三层vxlan原理_网工知识角|没人会告诉你的网络SDN软定义技术中VXLAN的4个特点
  18. OpenCV实现角点检测(cornerHarris)
  19. 【git】git本地如何合并分支
  20. python趣味小工具,图片转Execl,图片转TXT工具

热门文章

  1. 2021,你年终结算了吗? | 佛系理财
  2. Android第三方登陆之微信Wechat、WeiXin篇(原生登陆授权)
  3. phpcms 点赞_Phpcms 实现文章点赞功能 【原创】
  4. [高通SDM450][Android9.0]debug串口转通用串口
  5. Oracle官方最新jdk8下载地址
  6. 盗墓诡闻录服务器维护,幽行玄城摸金校尉职业厉不厉害 盗墓诡闻录摸金校尉技能解析...
  7. 百度发春节搜索大数据:80后最关注什么?
  8. Serializable和Parcelable总结
  9. 如何管理linux的软件,linux 软件安装及管理
  10. 五角星有多少轴对称_如图所示正五角星是轴对称图形,它有()条对称轴.