概述
序列化异常:
Exception in thread “main” java.io.InvalidClassException: cn.itcast.day012.demo08Serializable.Person; local class incompatible: stream classdesc serialVersionUID = -5145207523530997190, local class serialVersionUID = -2071565876962058344
序列化流:把对象按照流一样的方式存入文本文件或者在网络中传输。 对象 – 流数据(ObjectOutputStream)
反序列化流:把文本文件中的流对象数据或者网络中的流对象数据还原成对象。流数据 – 对象(ObjectInputStream)
序列化流和反序列化流不同于字节流 字符流 内存字节流,这些都是把字符串写入/读取文件,序列化流和反序列化流可以将对象写入/读取文本文件中.
但是我们要注意的是,写入和读取的文件要实现Serializable这个接口,当然这个接口是没有任何方法的,直接implements就好,类似于这种没有任何方法的接口被称为标记接口.
解决方法:
统一所有serialVersionUID,代码如下:
private static final long serialVersionUID = -2071565876962058344L;
Person类:
package cn.itcast.day012.demo08Serializable;
import java.io.Serializable;
public class Person implements Serializable{
private static final long serialVersionUID = -2071565876962058344L;
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + ''' +
", age=" + age +
'}';
}
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
序列化流:
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("day012-code\object_out.txt"));
oos.writeObject(new Person("张三",18));
oos.close();
反序列化流:
public static void main(String[] args) throws IOException, ClassNotFoundException {
//
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("day012-code\object_out.txt"));
Object obj = ois.readObject();
ois.close();
System.out.println((Person)obj);
}
最后
以上就是会撒娇黑猫为你收集整理的java反序列化异常——InvalidClassException的全部内容,希望文章能够帮你解决java反序列化异常——InvalidClassException所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复