(转)java 序列化ID的作用

Posted CS408

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(转)java 序列化ID的作用相关的知识,希望对你有一定的参考价值。

序列化ID的作用:

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

序列化ID如何产生:

       当我们一个实体类中没有显示的定义一个名为“serialVersionUID”、类型为long的变量时,Java序列化机制会根据编译时的class自动生成一个serialVersionUID作为序列化版本比较,这种情况下,只有同一次编译生成的class才会生成相同的serialVersionUID。譬如,当我们编写一个类时,随着时间的推移,我们因为需求改动,需要在本地类中添加其他的字段,这个时候再反序列化时便会出现serialVersionUID不一致,导致反序列化失败。那么如何解决呢?便是在本地类中添加一个“serialVersionUID”变量,值保持不变,便可以进行序列化和反序列化。

使用:

public class Person implements Serializable  {
    //序列化ID
    private static final long serialVersionUID = -5809782578272943999L;
// ...
}

没有序列化id时候,如果在类中增加字段,会产生异常

java.io.InvalidClassException

参考

java 序列化ID的作用

以上是关于(转)java 序列化ID的作用的主要内容,如果未能解决你的问题,请参考以下文章

[转]Java 之 Serializable 序列化和反序列化的概念,作用的通俗易懂的解释

java代码在片段活动中不起作用

(转) Java中的负数及基本类型的转型详解

转:serialVersionUID作用

fastjson中怎么把java对象转化为json对象

Java中序列化作用是啥?为啥要序列化?