Почему для сериализации требуется UID серийной версии в реализованном классе?
Почему для сериализации требуется UID серийной версии в реализованном классе?
4 ответа
Из документа дляjava.ioSerializable
:
Среда выполнения сериализации связывает с каждым сериализуемым классом номер версии, называемый serialVersionUID, который используется во время десериализации для проверки того, что отправитель и получатель сериализованного объекта загрузили классы для этого объекта, которые совместимы в отношении сериализации. Если получатель загрузил класс для объекта, у которого есть serialVersionUID, отличный от класса соответствующего отправителя, то десериализация приведет к
InvalidClassException
, Сериализуемый класс может объявить свой собственный serialVersionUID явно, объявив поле с именем"serialVersionUID"
должно быть статическим, окончательным и длинным
Вы спрашиваете, зачем вообще нужен UID?
Таким образом, он знает, совместимы ли два сериализованных объекта друг с другом. Вы могли изменить интерфейс / методы / и т. Д.
UID - это (по общему признанию, довольно слабый) контракт, в котором говорится, что эти два объекта на самом деле являются объектами одного типа.
Почему для сериализации требуется UID серийной версии в реализованном классе?
Это не "требует" этого вообще. Это дополнительная функция.
SerialVersionUID используется как элемент управления версиями в классе Serializable. Если вы явно не объявите serialVersionUID, JVM сделает это за вас автоматически, основываясь на различных аспектах вашего сериализуемого класса, как описано в Спецификации сериализации объектов Java(TM).