Java中的序列化
序列化
今天想看看SpringBoot集中处理Exception的注解,继承RuntimeException的时候点进去看了一下源码,发现有一个成员属性
查了一下这个serialVersionUID的用处,简单讲就是Java是以字节流传输对象的,如果使用字节流对象将一个引用对象传输入文件中,需要对对象做序列化,转换成字节的形式,而在反序列化的时候,会从反序列化读取到的字节流中查看这个serivalVersionUID和检测文件中的serivalVersionUID(想要反序列化成的类的class文件中的成员属性),如果一致,就说明可以转化,如果不一致就会抛出异常
当然,我们自定义的类想要进行序列化,需要实现Serializable接口,才能交付一系列序列化方法。但是不是必须要显示定义serivalVersionUID属性
只要在不同版本的Person类中定义相同的serivalVersionUID,都能序列化和反序列化,只是不含有的属性会被忽略
父类序列化和Transient关键字
transient关键字可以防止属性被序列化到文件后,反序列化之后,transient变量的值被设置为初始值
-
举一个场景例子,如果父类没有实现Serializable 接口,而子类实现了,序列化该子类对象,再反序列化后输出父类中定义的某变量的数值,这个数值是与序列化之前不相同的,因为父类的部分没有被序列化掉
-
而因为想要反序列化构造子类,就一定要先构造父类对象,所以这种场景下就会调用父类的默认无参构造方法来构造一个父类的对象
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)