【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
**开源地址:https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB **
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return “User{” +
“name='” + name + ‘’’ +
“, age=” + age +
‘}’;
}
}
(2) 测试类
先进行序列化, 再进行反序列化.
public class DemoSerialVersionUID {
private static void serialize(User user) throws Exception {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File(“D:\test\111.txt”)));
oos.writeObject(user);
oos.close();
}
private static User deserialize() throws Exception{
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File(“D:\test\111.txt”)));
return (User) ois.readObject();
}
public static void main(String[] args) throws Exception {
User user = new User();
user.setName(“Listen”);
user.setAge(22);
System.out.println("序列化前的结果: " + user);
serialize(user);
User dUser = deserialize();
System.out.println("反序列化后的结果: "+ dUser);
}
}
(3) 结果
先注释掉反序列化代码, 执行序列化代码, 然后 User 类新增一个属性 sex
public class User implements Serializable {
private String name;
private Integer age;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return “User{” +
“name='” + name + ‘’’ +
“, age=” + age +
“, sex='” + sex + ‘’’ +
‘}’;
}
}
再注释掉序列化代码执行反序列化代码, 最后结果如下:
Exception in thread “main” java.io.InvalidClassException: User; local class incompatible: stream classdesc serialVersionUID = -8511650324417820915, local class serialVersionUID = -29281549270299246
报错结果为序列化与反序列化产生的 serialVersionUID 不一致.
接下来我们在上面 User 类的基础上显示指定一个 serialVersionUID
再执行上述步骤, 测试结果如下:
序列化前的结果: User{name=‘Listen’, age=22, sex=‘null’}
反序列化后的结果: User{name=‘Listen’, age=22, sex=‘null’}
Process finished with exit code 0
显示指定 serialVersionUID 后就解决了序列化与反序列化产生的 serialVersionUID 不一致的问题.