java对象序列化readObject / defaultReadObject

时间:2010-11-07 19:03:38

标签: java serialization

readObject课程中defaultReadObjectObjectInputStream之间的区别是什么?我似乎无法找到关于差异的非常多的信息。

1 个答案:

答案 0 :(得分:24)

defaultReadObject()调用默认的反序列化机制,并在readObject()类上定义Serializable方法时使用。换句话说,当您具有自定义反序列化逻辑时,您仍然可以返回到默认序列化,这将反序列化非静态非瞬态字段。例如:

public class SomeClass implements Serializable {
    private String fld1;
    private int fld2;
    private transient String fld3; 
    private void readObject(java.io.ObjectInputStream stream)
         throws IOException, ClassNotFoundException {
         stream.defaultReadObject(); //fills fld1 and fld2;
         fld3 = Configuration.getFooConfigValue();
    }
]

另一方面,从反序列化对象外部创建readObject()时,使用ObjectInputStream,并且想要读取先前序列化的对象:

ObojectInputStream stream = new ObjectInputStream(aStreamWithASerializedObject);
Object foo = (Foo) stream.readObject();