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
①:
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
相关文章推荐
- Java序列化之readObjectNoData、readResolve方法
- Note-序列化时readObjectNoData的使用
- Java的Serializable序列化接口的readObject和writeObject方法
- 对于java readobject()方法是否判断到尾部
- java连接access数据库调用getString方法报错java.sql.SQLException: No data found
- 拣点芝麻:dbcp (Oracle)重新链接的问题 - Cause: java.sql.SQLException: No more data to read from socket
- (精)java.sql.SQLException: No more data to read from socket
- JAVA对象流序列化时的readObject,writeObject,readResolve是怎么被调用的
- [疯狂Java]I/O:其它自定义序列化的方法(transient、writeReplace、readResolve、Externalizable)
- The readResolve Method -- 序列化实现readResolve方法的作用
- 初探Java序列化(2)-writeObject/readObject
- java 中序列化与readResolve()方法的实例详解
- js调用java方法的遇到的坑Uncaught TypeError: Object [object Object] has no method
- Android webview js 调用java方法报错"Uncaught TypeError: Object [object Object] has no method xx
- java 对象序列化与反序列化 FileInputSteam.readObject,writeObject
- Serialization中的readObjectNoData
- java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitor的解决方法
- ResultSet can not re-read row data for column 1 问题的解决方法
- 错误:java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitor的解决方法
- Be Careful With Transient Data(Java序列化与trasient变量)