【发布时间】:2021-04-15 02:18:58
【问题描述】:
为什么我在尝试将 Child 类读入 Parent 的类变量时没有错误?
我认为在分配已读取的对象之前,编译器会检查两个类(变量类和已读取的类)的serialVersionUID,如果serialVersionUID 不等于InvalidClassException,则抛出。那么A 类和B 类是否具有相同的serialVersionUID?
import java.io.*;
class A {}
class B extends A implements Serializable {}
public class Test
{
public static void main(String[] args) throws IOException, ClassNotFoundException
{
FileOutputStream fileOutputStream = new FileOutputStream("b.bin");
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
B b1 = new B();
objectOutputStream.writeObject(b1);
objectOutputStream.close();
FileInputStream fileInputStream = new FileInputStream("b.bin");
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
A a1 = (A) objectInputStream.readObject(); // why I don't have an InvalidClass Exception here
objectInputStream.close();
}
}
【问题讨论】:
标签: java serialization deserialization