java 序列化serialVersionUID 作用

来源:互联网 发布:linux tomcat无法启动 编辑:程序博客网 时间:2024/05/19 05:33

eclipse开发java是,对于需要传输存储对象的需求,一种选择就是序列化对象。对于序列化的对象包含serialVersionUID 字段。作用如下:

     简单来说,Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。

    情况一:类定义时不指定serialVersionUID,此时编译时会产生一个随机的8byte的值。换句话说就是没编译一次这个值就变一次。这就要求序列化与反序列化的class文件必须是同一次编译生成的。能动性太差。

    情况二:类定义时指定serialVersionUID为一个固定值。可以实现不管编译几次,相互之间都是兼容的。但是有风险,如果类的属性名方法名字等改变了,反序列化机制不会报错,产生错误结果,损失惨重。

    情况三:类定义时指定serialVersionUID的值,这个值是根据类的属性描述方法描述类的描述的一个哈希值,每次更改代码时重新生产一次。解决相同代码多次编译的兼容性,避免代码改变、不同类型反序列化的风险。需要编译器的保证。

0 0