1、为什么要有序列化版本号?
类实现了serializable接口,会自动生成序列化版本号。用于区分相同的类,假如两个朋友都写了相同的User类并序列化,但是jvm可以根据序列化版本号区分。
2、序列化版本号为什么要固定不变?
方便修改,因为后期修改代码,源码进行重新编译,生成了全新的字节码文件序列化版本号也会发生变化,就不能反序列化了。
如果固定序列化版本号,后期修改代码,jvm也会认为是同一个类。
3、序列化
public class Demo {
public static void main(String[] args) throws Exception {
ObjectOutputStream oop = new ObjectOutputStream(new FileOutputStream("User"));
User user = new User("张三");
oop.writeObject(user);
oop.flush();
oop.close();
}
}
class User implements Serializable {
String name;
public User(){}
public User(String name){
this.name = name;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
'}';
}
}
4、反序列化
public class Demo2 {
public static void main(String[] args) throws IOException {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("User"));
try {
Object o = ois.readObject();
System.out.println(o);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
ois.close();
}
}