Можно ли сериализовать переходное поле класса с помощью моей пользовательской сериализации или с помощью экстернализации?
Можно ли сериализовать переходное поле класса с помощью моей пользовательской сериализации или использование экстернализации?
Пример: существует класс Person
, имеющий поле имени transient
transient String name;
Можно ли сериализовать его, используя следующие методы?
private void writeObject(ObjectOutputStream out) throws IOException;
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException;
2 ответа:
Ответ-Да, если вы используете пользовательский сериализатор. Когда мы выполняем пользовательскую сериализацию, переопределяя метод
writeObject
, вы получаете контроль над сериализацией и можете делать все, что хотите. Таким образом, вы также можете назначить или использовать значение поляtransient
, а также маршалловать его вместе с другими атрибутами класса.
Вы можете записывать / читать любые поля, включая переходные в writeObject / readObject. Однако нет особого смысла сначала скрывать поле с переходным процессом, а затем просто записывать / читать его с пользовательской сериализацией. Обычно переходные поля вообще не сериализуются или требуют специальной обработки с помощью пользовательской сериализации.
Что касается экстернализации, то она игнорирует переходные процессы, все поля записываются / читаются явно.