序列化与反序列化

serialVersionUID适用于java序列化机制。

在反序列化的时候,首先会验证serialVersionUID是否一致,如果不一致会抛出InvalidCastException异常。

序列化过程中遇到最多的就是,单方增加了某个字段,而另外一方没有更新。

@Data
public class vector implements Serializable {
  private static final long serialVersionUID = 12345;

  String id;
  String name;
  // 反序列化时增加
  //String newStr;
}

那以上类做个例子。

1.反序列化时增加newStr字段。

   序列化

public class SerialTest {
  public static void main(String[] args) throws IOException {
    vector vector = new vector();
    vector.setId("id");
    vector.setName("name");
    FileOutputStream fos =
        new FileOutputStream(
            "C:\\Users\\pengcheng.fa\\IdeaProjects\\test_mock\\src\\main\\resources\\vector.txt");
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    oos.writeObject(vector);
    oos.flush();
    oos.close();
  }
}

  反序列化

ublic class DeserialTest {
  public static void main(String[] args) throws IOException, ClassNotFoundException {
    vector vector;
    FileInputStream fis =
        new FileInputStream(
            "C:\\Users\\pengcheng.fa\\IdeaProjects\\test_mock\\src\\main\\resources\\vector.txt");
    ObjectInputStream ois = new ObjectInputStream(fis);
    vector = (vector) ois.readObject();
    ois.close();
    System.out.println(vector);
  }
}

   运行结果

结果:不影响序列化,新增字段被赋值为null。

2.序列化前增加newStr字段。

   序列化

public class SerialTest {
  public static void main(String[] args) throws IOException {
    vector vector = new vector();
    vector.setId("id");
    vector.setName("name");
    vector.setNewStr("newStr");
    FileOutputStream fos =
        new FileOutputStream(
            "C:\\Users\\pengcheng.fa\\IdeaProjects\\test_mock\\src\\main\\resources\\vector.txt");
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    oos.writeObject(vector);
    oos.flush();
    oos.close();
  }
}

  反序列化

ublic class DeserialTest {
  public static void main(String[] args) throws IOException, ClassNotFoundException {
    vector vector;
    FileInputStream fis =
        new FileInputStream(
            "C:\\Users\\pengcheng.fa\\IdeaProjects\\test_mock\\src\\main\\resources\\vector.txt");
    ObjectInputStream ois = new ObjectInputStream(fis);
    vector = (vector) ois.readObject();
    ois.close();
    System.out.println(vector);
  }
}

   运行结果

结果:不影响序列化,序列化时不存在字段不做处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值