我试图了解如何使用示例进行反序列化:
class A implements Serializable{
int x=3;
long y=4;
short z=5;
}
public class B extends A{
public B(){
x=7;
}
public String toString(){
return ""+x+""+y+""+z;
}
public static void main(String[] args) {
B b=new B();
try{
FileOutputStream fos=new FileOutputStream("ser.ser");
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(b);
oos.close();
System.out.println(b);
FileInputStream fis=new FileInputStream("ser.ser");
ObjectInputStream ois=new ObjectInputStream(fis);
b=(B)ois.readObject();
ois.close();
System.out.println(b);
}
catch(Exception e){
e.printStackTrace();
}
}
}
它产生745
但是当我implement serializable in B
上课时,结果为345
我无法理解B类序列化的差异......
答案 0 :(得分:3)
反序列化对象时,对于层次结构中没有实现Serializable
接口的所有类,调用构造函数来初始化该类中的状态。
因此,当您的班级B
未实施Serializable
时,构造函数会运行,并将7
分配给x
,因此您获得745
。但是,当它实现Serializable
时,这不会发生,并且x
的值将是它在序列化对象时的值,即在这种情况下为3
。