您的位置:首页 > 移动开发 > Objective-C

Java序列化之readObjectNoData、readResolve方法

2017-04-16 13:32 489 查看
资料地址: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: