java反序列化的原理,java – 反序列化的工作原理?

据我所知,没有调用Object的序列化类的构造函数,而是第一个非序列化构造函数的no-arg构造函数.现在考虑以下代码

public class SerializeDemo implements Serializable {

private String name;

int age; //default 0

public SerializeDemo(String name, boolean setAge){

this.name = name;

if(setAge){

this.age = 18;

}

}

@Override

public String toString() {

return "Name is " + name + " and age is " + age;

}

public static void main(String args[]) throws IOException, ClassNotFoundException {

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("//home//aniket//Desktop//serializedObjects.txt")));

ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("//home//aniket//Desktop//serializedObjects.txt")));

SerializeDemo sd = new SerializeDemo("Test",true);

System.out.println("Before Serialization : " + sd);

oos.writeObject(sd);

SerializeDemo sdCopy = (SerializeDemo)ois.readObject();

System.out.println("After Deserialization : " + sdCopy);

}

}

和输出(如预期的那样)

Before Serialization : Name is Test and age is 18

After Deserialization : Name is Test and age is 18

现在,具有no-arg构造函数的非可序列化超类是Object(如果我错了,请纠正我).所以基本上没有调用SerializeDemo构造函数.

现在,在反序列化期间创建Object时,它将尝试重建实例状态.所以它将年龄定为18岁.

问题是怎么样的?

我故意不提供二传手.也不是按照上面的讨论,它的构造函数被调用.那它是如何设置的?(同样适用于名称)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值