描述
实现Serializable
接口时,会提示声明serialVersionUID
。本文说明serialVersionUID
的作用。
解释
serialVersionUID是java类的版本标识。
在网络传输和持久化的时候会将对象序列化。在反序列化中,如果提供方和接受方的serialVersionUID不一致,会抛出InvalidClassException
。
1L和generated
IDE提示两种生成serialVersionUID策略。
第一种用于版本兼容,比如serialVersionUID=1L,然后修改类后想兼容之前的数据,就不更改这个值。如果修改这个值就不兼容了。
第二种生成是根据类名、方法名、字段信息,如果类修改了则重写生成serialVersionUID就会不同。
serialVersionUID=1L
serialVersionUID=8048209891021508979L
代码
public static void main(String[] args) {
Dog lucy = new Dog("lucy", 4, "Smith");
File file = new File("/Users/lucy/Desktop/lucy.out");
try {
// 序列化
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(file));
out.writeObject(lucy);
out.close();
// 反序列化
ObjectInputStream in = new ObjectInputStream(new FileInputStream(file));
Object o = in.readObject();
in.close();
System.out.println(o);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
引用
https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/what-is-a-serialversionuid-and-why-should-i-use-it.md
https://blog.csdn.net/fbysss/article/details/5844478
网友评论