专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

探析“Java序列化”之serialVersionUID

未显式指定serialVersionUID

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

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

反序列化过程

1、 首先,载入需要反序列化的byte[]数组,并解析出类名全路径,jvm会使用URLClassLoader去找本虚拟机中是否加载过这样类名的一个类;
2、 如果有,计算这个类的serialVersionUID值(如果显示声明了就不用计算,直接用),再和byte[]数组中的serialVersionUID对比,不相同报出异常;
3、 当相同时,根据刚刚得到的类名全路径newInstance一个对象出来,然后使用反射将byte内容一一复制给该对象,最后返回该对象。

文章永久链接:https://tech.souyunku.com/19495

未经允许不得转载:搜云库技术团队 » 探析“Java序列化”之serialVersionUID

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们