Вопросы, касающиеся Externalizable и Serializable

Мы можем использовать методы readResolve и writeReplace для обозначения замещающих объектов как для экземпляров Externalizable, так и для сериализуемых...

Просто хотел знать пару вещей:

1) Можно ли использовать методы readObject(ObjectInputStream is) и writeObject(ObjectOutputStream os) в сочетании с readResolve() и writeReplace() для класса Serilaizable? Можно ли заменить объект и затем выполнить операции модификации в потоке байтов, используя readObject и writeObject 2) writeExternal объекта Exteralizable должен явно координироваться с супертипом, чтобы сохранить его состояние. Просто хотелось бы знать, что это верно и для суперклассов Serializable (но not Externalizable) или состояние классов Serilizable автоматически сохраняется при записи экземпляра в поток?

1 ответ

Решение

Порядок выполнения методов, если для класса Serializable присутствует несколько специальных методов

Методы выполняются в следующем порядке:

Когда происходит сериализация, порядок выполнения методов выглядит следующим образом:

writeReplace
writeObject
readObject
readResolve
validateObject

Ответ на пункт 1)

Поэтому ответ на вопрос 1 - да

Ответ на пункт 2)

От JavaDoc Сериализуемый интерфейс Javadoc, для специальных методов, таких как

 private void writeObject(java.io.ObjectOutputStream out)
     throws IOException

The writeObject method does not need to concern itself with the state belonging to its superclasses or subclasses. State is saved by writing the individual fields to the ObjectOutputStream using the writeObject method or by using the methods for primitive data types supported by DataOutput.
Другие вопросы по тегам