• 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是作为最重要的参考标准,如果没有该字段才要求字段需要完全相同。

  • 相关阅读:
    mysql 1
    mysql 创建库
    SQLServer2008数据库卸载图解
    同一个局域网中用Windows自己的远程桌面远程局域网中的其他PC
    WIN10怎么安装SQL server2000数据库
    怎样彻底卸载(删除)SQL server2000
    SQL Server 2000安装教程图解
    如何将网页保存为PDF文件
    【转】ArcGIS API for Silverlight/WPF 2.1学习笔记(四)
    【转】ArcGIS API for Silverlight/WPF 2.1学习笔记(五)
  • 原文地址:https://www.cnblogs.com/b3051/p/14506920.html
Copyright © 2020-2023  润新知