Java序列化之readObjectNoData、readResolve方法

资料地址:http://docs.oracle.com/javase/1.5.0/docs/guide/serialization/spec/input.html#5903、

①:

private void readObjectNoData() throws ObjectStreamException;  

Serializable对象反序列化时,由于序列化与反序列化提供的class版本不同,序列化的class的super class不同于序列化时的class的super class;或者收到有敌意的流;或接收不完整;都会对初始化对象字段值时造成影响。 

每个Serializable class都应该定义自己的readObjectNoData方法。如果发生以上情况时,没有定义readObjectNoData方法时,类的字段就会初始化成它们的默认值(列在section 4.5.5 of The JavaTM Language Specification, Second Edition)。这种行为在版本1.4 of the JavaTM 2 SDK支持readObjectNoData方法之后是固定的。 

当出现上面的情况时,readObjectNoData会取代readObject的调用。 


②:

ANY-ACCESS-MODIFIER Object readResolve()  
             throws ObjectStreamException;  

对于Serializable and Externalizable classes,方法readResolve允许class在反序列化返回对象前替换、解析在流中读出来的对象。实现readResolve方法,一个class可以直接控制反序化返回的类型和对象引用。 

方法readResolve会在ObjectInputStream已经读取一个对象并在准备返回前调用。ObjectInputStream 会检查对象的class是否定义了readResolve方法。如果定义了,将由readResolve方法指定返回的对象。返回对象的类型一定要是兼容的,否则会抛出ClassCastException 。


转自:http://vyloy.iteye.com/blog/1240663

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值