Java对象序列化规范中的readObjectNoData部分似乎很有趣(请参阅下文)。
您对问题的编辑给出了一个完美的例子。如果
Employee是
serialized,当它并未扩大
Person,后来
deserialized当它没有那么
Person部分将被初始化为空字符串,0岁。使用此方法,可以将它们分别初始化为“名称”和1。
对于可序列化的对象,在子类实例被反序列化并且序列化流未将所讨论的类列为反序列化对象的超类的情况下,readObjectNoData方法允许类控制其自身字段的初始化。在接收方使用与发送方不同的反序列化实例类的版本,并且接收方的版本扩展了发送方版本未扩展的类的情况下,可能会发生这种情况。如果序列化流已被篡改,也会发生这种情况。因此,尽管源流“敌对”或不完整,但readObjectNoData对于正确初始化反序列化的对象很有用。
private void readObjectNoData() throws ObjectStreamException;每个可序列化的类都可以定义自己的readObjectNoData方法。如果可序列化的类未定义readObjectNoData方法,则在上述情况下,该类的字段将被初始化为其默认值(如JavaTM语言规范第二版第4.5.5节中列出);当引入了对readObjectNoData方法的支持时,此行为与JavaTM
2
SDK标准版1.4之前的ObjectInputStream的行为一致。如果可序列化的类确实定义了readObjectNoData方法,并且出现了上述情况,
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)