serialVersionUID详解

  • 序列化是将对象的状态信息转换为可存储或传输的形式的过程。
    我们都知道, Java对象是保存在JVM的堆内存中的, 也就是说, 如果JVM堆不存在了, 那么对象也就跟着消失了。
  • ⽽序列化提供了⼀种⽅案, 可以让你在即使JVM停机的情况下也能把对象保存下来的⽅案。 就像我们平时⽤的U盘⼀样。把Java对象序列化成可存储或传输的形式( 如⼆进制流) , ⽐如保存在⽂件中。 这样, 当再次需要这个对象的时候,从⽂件中读取出⼆进制流, 再从⼆进制流中反序列化出对象。 但是, 虚拟机是否允许反序列化, 不仅取决于类路径和功能代码是否⼀致,⼀个⾮常重要的⼀点是两个类的序列化 ID 是否⼀致, 即serialVersionUID要求⼀致。
  • 在进⾏反序列化时, JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进⾏⽐较, 如果相同就认为是⼀致的, 可以进⾏反序列化, 否则就会出现序列化版本不⼀致的异常, 即是InvalidCastException。
  • 这样做是为了保证安全, 因为⽂件存储中的内容可能被篡改。当实现java.io.Serializable接口的类没有显式地定义⼀个serialVersionUID变量时候, Java序列化机制会根据编译的Class⾃动⽣成⼀个serialVersionUID作序列化版本⽐较⽤, 这种情况下, 如果Class⽂件没有发⽣变化, 就算再编译多 次, serialVersionUID也不会变化的
  • 但是, 如果发⽣了变化,那么这个⽂件对应的serialVersionUID也就会发⽣变化。
    基于以上原理, 如果我们⼀个类实现了Serializable接口, 但是没有定义serialVersionUID, 然后序列化。 在序列化之后, 由于某些原因, 我们对该类做了变更, 重新启动应⽤后, 我们相对之前序列化过的对象进⾏反序列化的话就会报错

serialVersionUID详解相关推荐

  1. es springboot 不设置id_es(elasticsearch)整合SpringCloud(SpringBoot)搭建教程详解

    注意:适用于springboot或者springcloud框架 1.首先下载相关文件 2.然后需要去启动相关的启动文件 3.导入相关jar包(如果有相关的依赖包不需要导入)以及配置配置文件,并且写一个 ...

  2. 十二、springboot 详解RestControllerAdvice(ControllerAdvice)

    springboot 详解RestControllerAdvice(ControllerAdvice)拦截异常并统一处理 简介 @Target({ElementType.TYPE}) @Retenti ...

  3. Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! "看看星空,会觉得自己很渺小,可能我们在宇宙中从来就是一个偶然.所以,无论什么事情,仔 ...

  4. java objectoutputstream怎么用_java序列化与ObjectOutputStream和ObjectInputStream的实例详解...

    java序列化与ObjectOutputStream和ObjectInputStream的实例详解 一个测试的实体类: public class Param implements Serializab ...

  5. java 值对象_java 中设计模式(值对象)的实例详解

    java 中设计模式(值对象)的实例详解 应用场景:在Java开发时,需要来回交换大量的数据,比如要为方法传入参数,也要获取方法的返回值,该如何能更好的进行数据的交互?这个时候就需要用到我们的值对象设 ...

  6. Java 注解用法详解——@SuppressWarnings

    转自: https://www.cnblogs.com/fsjohnhuang/p/4040785.html Java魔法堂:注解用法详解--@SuppressWarnings 一.前言 编码时我们总 ...

  7. LSTM入门必读:从入门基础到工作方式详解 By 机器之心2017年7月24日 12:57 长短期记忆(LSTM)是一种非常重要的神经网络技术,其在语音识别和自然语言处理等许多领域都得到了广泛的应用

    LSTM入门必读:从入门基础到工作方式详解 By 机器之心2017年7月24日 12:57 长短期记忆(LSTM)是一种非常重要的神经网络技术,其在语音识别和自然语言处理等许多领域都得到了广泛的应用. ...

  8. Spring事务管理(详解+实例)

    写这篇博客之前我首先读了<Spring in action>,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识总结一下,参考的文章如下: ...

  9. Java 序列化Serializable详解(附详细例子)

    Java 序列化Serializable详解(附详细例子) 1.什么是序列化和反序列化 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization ...

  10. JavaWeb 入门篇 (5) Cookie 和 Session 详解

    Cookie 和 Session 详解 一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 有状态会话:一个同学来过 ...

最新文章

  1. python期末考试编程题_智慧树知到_Python程序设计基础_期末考试答案
  2. Nginx禁止指定目录运行PHP脚本
  3. Windows下编程需要看哪些书
  4. cmd上写的java简单代码_用cmd编辑一个超级简单的小游戏,求代码
  5. hdu 4442 Physical Examination (2012年金华赛区现场赛A题)
  6. 聚类实践(无监督学习)
  7. transport方式连接Elasticsearch6.2.3
  8. 贴片电容的0.65T,0.8T,1.25T,2.5T是什么意思
  9. php- osc,pt-osc使用一则
  10. Android studio成品源码项目计步器锻炼跑步步数,该计步器实现了实时计步,设定计划提醒
  11. 微信小程序Demo大全
  12. Java串口通信(RXTX)
  13. nginx-1.13.7 按照centos8 报错记录
  14. flink任务优化总结
  15. 解决springboot无法访问此网站,springboot启动后无法访问网站
  16. xxxx is not translated in zh-rCN, zh-rTW
  17. gtsam 学习十一(ISAM2 实践)
  18. crypto buuctf rabbit
  19. 吉首大学2019年程序设计竞赛(重现赛) 干物妹小埋(线段树求最长上升子序列)
  20. 代码补全漫谈(1) - 从TabNine说起

热门文章

  1. Android下载Apk安装包,下载完毕后,系统自动进行安装
  2. 缠中说禅形态挖掘之七笔形态
  3. ENVI 遥感图像监督分类概述
  4. Layout-pcb之天线设计
  5. 前端截图与贴图神器snipaste下载与常见问题(1)
  6. 【网络技术题库梳理11】第三道大题——DHCP报文
  7. 文本特征提取方法深度研究
  8. win7计算器功能详解 win10参考
  9. shapley和树的shap
  10. Windows下 Java9安装教程