сериализация объектов java readObject/defaultReadObject

в чем разница между readObject и defaultReadObject на ObjectInputStream класса? Кажется, я не могу найти много информации о разнице.

1 ответов


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();