Можно ли сериализовать переходное поле класса с помощью моей пользовательской сериализации или с помощью экстернализации?


Можно ли сериализовать переходное поле класса с помощью моей пользовательской сериализации или использование экстернализации?

Пример: существует класс Person, имеющий поле имени transient

transient String name;

Можно ли сериализовать его, используя следующие методы?

private void writeObject(ObjectOutputStream out) throws IOException;
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException;
2 3

2 ответа:

Ответ-Да, если вы используете пользовательский сериализатор. Когда мы выполняем пользовательскую сериализацию, переопределяя метод writeObject, вы получаете контроль над сериализацией и можете делать все, что хотите. Таким образом, вы также можете назначить или использовать значение поля transient, а также маршалловать его вместе с другими атрибутами класса.

Вы можете записывать / читать любые поля, включая переходные в writeObject / readObject. Однако нет особого смысла сначала скрывать поле с переходным процессом, а затем просто записывать / читать его с пользовательской сериализацией. Обычно переходные поля вообще не сериализуются или требуют специальной обработки с помощью пользовательской сериализации.

Что касается экстернализации, то она игнорирует переходные процессы, все поля записываются / читаются явно.