Java序列化

参考:

java序列化,看这篇就够了
java序列化机制,这一篇文章就够了
Java序列化和反序列化,你该知道得更多
Java 之 Serializable 序列化和反序列化的概念,作用的通俗易懂的解释
Java 的序列化 (Serialization) 教程
Java 对象序列化

serialVersionUID的认知补充:

JDK推荐我们实现Serializable接口后,再去生成一个固定的序列化id–serialVerionUID,而这个id的作用是用来作为传输/读取双端进程的版本是否一致的,防止我们因为版本不一致导致的序列化失败。

编译器推荐我们有两种方式,一种是生成默认的versionID,这个值为1L,还有一种方式是根据类名、接口名、成员方法及属性等来生成一个 64 位的哈希字段,只要我们类名、方法名、变量有修改,或者有空格、注释、换行等操作,计算出来的哈希字段都会不同,当然这里需要注意,每次我们有以上的操作的时候尽量都要重新生成一次serialVerionUID(编译器并不会给你自动修改)。

详述 IntelliJ IDEA 中自动生成 serialVersionUID 的方法

那么又有个问题出现了,既然这个serialVersionUID如此重要,那么编译器推荐我们两种方法,我们到底该如何选择,这两种区别又在哪?上面我们也知道两种序列化UID一个是固定的1L默认值,一个是按照类方法属性等计算出来的hash,只要有代码的修改,重新计算出来的结果就会改变,所以两个id一个是固定的,除非手动修改,另外一个可以认为每次修改完都会变化(其实是需要我们重新生成),根据这个特性,我们可以分别用在不同的场景下,比如,我们的一些dto与业务并无太大关系,很长时间甚至整个项目周期中,都是固定不会进行改变或者很少改变的dto,这里的dto建议使用默认值方式,同样也防止因为误操作等方式导致uid改变造成序列化失败(比如不小心修改了顺序等,如果是第二种方式,重新生成的话,就会改变),也可以在基础库或者基础jar中定义的dto使用固定UID方式,保证dto的稳定,而在业务线开发过程中,我习惯动态生成UID,尤其是频繁修改的dto中,更是需要如此,防止在开发阶段一些未知的序列化问题或者未知问题没有被检测出来,而serialVersionUID的作用就是在序列化的时候,判断两个dto是否一致,也是jdk实现的接口规则,防止序列化不一致导致问题,除此之外并无其他区别。
参考自:详解Java序列化机制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值