gpt4 book ai didi

java - 在java反序列化过程中如何获取字段值?

转载 作者:行者123 更新时间:2023-11-29 05:29:58 25 4
gpt4 key购买 nike

我试图通过示例了解反序列化是如何完成的:

    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 但是当我 在 B 类中实现可序列化 时,结果是 345

我无法理解 B 类序列化的差异...

最佳答案

当你反序列化一个对象时,对于层次结构中所有向上的类,它没有实现 Serializable 接口(interface),调用构造函数来初始化该类中的状态。

因此,当您的类 B 没有实现 Serializable 时,构造函数运行,并将 7 分配给 x,因此你得到 745。但是,当它实现 Serializable 时,这不会发生,x 的值将是对象被序列化时的值,即 3 在这种情况下。

关于java - 在java反序列化过程中如何获取字段值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21460491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com