• java中serialVersionUID作用


    一般在模型类中且实现了Serializable接口,会有一个serialVersionUID字段,通常写作:

    private static final long serialVersionUID = xxxL;//xxx代表整数 
    

    简单点说就是避免在对字节流进行反序列化时,检测到对象的字段和原先序列化时的字段不一致时,报Exception的问题。

    什么时候回出现这种问题呢?举个例子:

    //服务器s1
    public class A implements Serializable {
        private static final long serialVersionUID = 123456L;
    
        public Long id;
        public String name;
    }
    
    //服务器s2
    public class A implements Serializable {
        private static final long serialVersionUID = 123456L;
    
        public String name;
        public String username;
    }
    

    我们有一个class A,分别在服务器s1和s2上,注意两个服务器上的class A的字段是不一样的,serialVersionUID字段值相同。现在由服务器s1创建一个对象a,序列化后传到s2。s2接收到字节数据后,进行反序列化操作,得到的a对象。由于字段不一致,在s2上的只能接收到name字段的值。
    从某种意义上说s1上的class A和是s2上的class A是不同的对象,但是由于有serialVersionUID字段存在,在反序列操作时会去判断两个值是否相同,如果相同就会丢弃到没有的字段的值,只匹配有交集的字段。s2中有的字段,s1中没有,值就取默认值。
    但,如果s1、s2中的的对象中serialVersionUID的值不相同,即使字段都能匹配上,也会抛出异常。说明在反序列化时,serialVersionUID是作为最重要的参考标准,如果没有该字段才要求字段需要完全相同。

  • 相关阅读:
    旺财速啃H5框架之Bootstrap(二)
    Java 8 的 Nashorn 脚本引擎教程
    kindeditor4整合SyntaxHighlighter,让代码亮起来
    让kindeditor显示高亮代码
    css伪元素用法大全
    弹性布局基础讲解与高效应用
    美化页面,从我做起
    深度理解微信小程序的思想
    程序员提升之道-人际交往篇
    前端-网站构建从零开始
  • 原文地址:https://www.cnblogs.com/b3051/p/14506920.html
Copyright © 2020-2023  润新知