java.io.Serializable接口类,相信很多攻城狮都用过,它是对象序列化和反序列化必须实现的接口类。我们需要显示的定义字段serialVersionUID
,或者在编译时,编译器自动生成这个字段。
作用
反序列化时版本比较使用。
显式和隐式的区别
private static final long serialVersionUID = 4578891993197200693L;
当我们显式在代码中写上serialVersionUID
的定义时,序列化和反序列化都会使用这个版本号。
当使用隐式方式生成的这个字段时,编译器会根据类名,成员名生成一个唯一的版本号。 序列化时用的版本号是version_id_1
,然后我们添加了一个类的成员,编译生成一个新的版本号version_id_2
,在对前一次序列化的结果进行反序列化时,比较版本号不一致,导致反序列化报错。所以,建议需要序列化和反序列化的类,显示定义版本号。
什么字段不能被序列化
- 静态字段
Transient
修饰的字段- 没有实现Serializable的父类字段
serialVersionUID如何自动生成(idea)
设置中搜索,serializable class without 'serialVersionUID'
,勾选,保存。 当一个类implements java.io.Serializable
时,鼠标放到类名上,会自动提示 Add serialVersionUID field
。
序列化的应用场景
- 对象序列化后,通过网络传输
- 序列化的对象,通过流存储到文件
今天的文章序列化字段 serialVersionUID 怎么理解?分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/15572.html