zoukankan      html  css  js  c++  java
  • 序列化之serialVersionUID

    serialVersionUID作用:

    序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。 

    序列化ID起着关键的作用,java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。反序列化时,JVM会把传来的字节流中的serialVersionUID与本地实体类中的serialVersionUID进行比较,如果相同则认为是一致的,便可以进行反序列化,否则就会报序列化版本不一致的异常。

    • 序列化:是把对象的状态信息转化为可存储或传输的形式过程,也就是把对象转化为字节序列的过程称为对象的序列化。
    • 反序列化:是序列化的逆向过程,把字节数组反序列化为对象,把字节序列恢复为对象的过程称为对象的反序列化。

    Serializable序列化的工作机制:
    序列化的时候系统会把当前类的serialVersionUID 写入序列化的文件中(也可能是其他中介),当反序列化的时候系统会去检测文件中的serialVersionUID ,看它是否和当前类的serialVersionUID 一致,如果一致就说明序列化的类的版本和当前类的版本是相同的,这个时候可以成功反序列化,否则就说明当前类和序列化的类相比发生了某些变换,比如成员变量的数量,类型可能发生了改变,这个时候就会抛异常,反序列化失败。
    serialVersionUID 生成:

    默认情况下,也就是不声明serialVersionUID 属性情况下,系统会按当前类的成员变量计算hash值并赋值给serialVersionUID 。

    声明serialVersionUID ,可以很大程度上避免反序列化过程的失败。比如当版本升级后,我们可能删除了某个成员变量,也可能增加了一些新的成员变量,这个时候我们的反序列化依然能够成功,程序依然能够最大程度地恢复数据,相反,如果不指定serialVersionUID ,程序就会挂掉。

    如果类结构发生了非常规性改变,比如修改了类名,类型等,这个时候尽管serialVersionUID 验证通过了,但是反序列化过程

    还是会失败,因为类结构有了毁灭性的改变。

     

     

     

     

  • 相关阅读:
    canvas实现圆角图片 (处理原图是长方形或正方形)
    px2rem在vue项目中的使用
    fastclick在混合app内卡死
    禁止网页的右键和复制功能
    2.Knockout.Js(监控属性Observables)
    1.Knockout.Js(简介)
    KnockoutJS学习笔记10:KonckoutJS foreach绑定
    mvc中使用knockoutjs和ajax
    15个最好的Bootstrap设计工具推荐
    在WIN7下安装运行mongodb 1)、下载MongoDB
  • 原文地址:https://www.cnblogs.com/KL2016/p/15719551.html
Copyright © 2011-2022 走看看