1) Почему требуется предоставить конструктор по умолчанию в случае сериализации.
Это не требование. Или, по крайней мере, это не требование, если вы используете сериализацию, реализованную с использованием ObjectInputStream
и ObjectOutputStream
.
2) Почему поле «блокировка» не инициализируется после десериализации?
Он должен быть инициализирован ... если вы используете ObjectInputStream
и ObjectOutputStream
. Объект lock
должен быть сериализован и затем десериализован.
(Если у вас есть случай, когда lock
по-видимому, не инициализирован, то, пожалуйста, опубликовать SSCCE, чтобы показать, что происходит.)
я неправильно утверждал, что ReentrantReadWriteLock
не сериализации ... Это ,
ОБНОВЛЕНИЕ в версии с transient
. Поле lock
для десериализованного экземпляра A
будет null
. Выражение инициализации в объявлении lock
не выполняется.
Для получения дополнительной информации, пожалуйста, прочтите Java Object Serialization Specification.
Если вы используете какой-либо другой механизм сериализации, вам нужно сказать, что это такое.
' Serializable '- это интерфейс, поэтому он должен быть« реализует Serializable » –
' 2) Почему поле «блокировка» не инициализируется после десериализации? », Потому что оно временное. – EpicPandaForce
@ EpicPandaForce, замок не получает desrialized из-за его преходящей природы. Но почему он не «инициализируется» новым объектом? На самом деле я хотел понять шаги десериализации, из-за которых она не инициализируется? – pjain