2010-11-07 4 views

ответ

22

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

Как остановить readObject, бросая исключение EOF? –

+0

@Aizaz вы не можете. Просто поймайте его. – Bozho