序列化版本号(serialVersionUID)作用
1、为什么要序列化
一些场景下需要把对象转变成字节序列
- 保存到存储介质上(磁盘等)
- 用于网络传输
一个很常见的应用是dubbo的RPC调用,如果参数是一个bean,那么远程调用的时候必然需要传递参数对象,这时候就必须将转变为字节序列(序列化)然后通过网络传输
2、序列化版本号的用处
在 序列化存储/反序列化读取 或者是 序列化传输/反序列化接收 时,JVM 会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。
在对实体类进行不影响业务流程的升级时,比如只追加了一个附加信息字段,可以不改变序列化版本号,来实现新旧实体类的兼容性(接收方的类里没有的字段被舍弃;多出来的字段赋初始值)。
private static final long serialVersionUID = 1L;
3、Transient 关键字
Transient 关键字的作用是控制变量的序列化,在变量声明前加上该关键字,可以阻止该变量被序列化到文件中,在被反序列化后,transient 变量的值被设为初始值。
除了使用 Transient 关键字以外,还可以将不需要被序列化的字段抽取出来放到父类中,子类实现 Serializable 接口,父类不实现,根据父类序列化规则,父类的字段数据将不被序列化。
4、序列化的对象范围
在有些情况下,要注意一个容易混淆的问题:序列化针对的是“对象”,类的成员变量(static)是不会被序列化保存或者传输的,毕竟一个存在堆内存,一个存在方法区。
————————————————
版权声明:本文为CSDN博主「鲱鱼罐头配白花蛇草水」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zmflying8177/article/details/101119134
本文来自博客园,作者:bgtong,转载请注明原文链接:https://www.cnblogs.com/bgtong/p/16502015.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了