反序列化

序列化相反,将二进制流转化为特定的数据结构。

在Java中,使用ObjectInputStream对对象进行反序列化。

反序列化对象时可能抛出的异常:

  • CLassNotFoundException:没有找到对应的Class
  • InvalidClassException:Class不匹配

为避免Class定义变动导致不兼容,Java序列化允许class定义一个特殊的serialVersionUID静态变量,用于标识Java类的序列化版本。如果增加或修改了字段,可以改变 serialVersionUID的值,这样就能组织匹配Class:

public class Person implements Serializable {
    private static final long seriaVersionUID = 2709425275741743919L;
}

反序列化时,是由JVM直接构造出Java对象,不调用构造方法,构造方法内部的代码,在反序列化时不会执行。