序列化字段 serialVersionUID 怎么理解?

序列化字段 serialVersionUID 怎么理解?java.io.Serializable接口类,相信很多攻城狮都用过,它是对象序列化必须实现的接口类。 什么字段不能被序列化 静态字段 Transient修饰的字段 没有实现Serializable的

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

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注