Java序列化之readObjectNoData、readResolve方法

资料地址:http://download.oracle.com/javase/1.5.0/docs/guide/serialization/spec/input.html
    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 。

你可能感兴趣的:(序列化,java)