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);
}
}
运行结果
结果:不影响序列化,序列化时不存在字段不做处理。