Почему для сериализации требуется UID серийной версии в реализованном классе?

Почему для сериализации требуется UID серийной версии в реализованном классе?

4 ответа

Решение

Из документа дляjava.ioSerializable:

Среда выполнения сериализации связывает с каждым сериализуемым классом номер версии, называемый serialVersionUID, который используется во время десериализации для проверки того, что отправитель и получатель сериализованного объекта загрузили классы для этого объекта, которые совместимы в отношении сериализации. Если получатель загрузил класс для объекта, у которого есть serialVersionUID, отличный от класса соответствующего отправителя, то десериализация приведет к InvalidClassException, Сериализуемый класс может объявить свой собственный serialVersionUID явно, объявив поле с именем "serialVersionUID" должно быть статическим, окончательным и длинным

Вы спрашиваете, зачем вообще нужен UID?

Таким образом, он знает, совместимы ли два сериализованных объекта друг с другом. Вы могли изменить интерфейс / методы / и т. Д.

UID - это (по общему признанию, довольно слабый) контракт, в котором говорится, что эти два объекта на самом деле являются объектами одного типа.

Почему для сериализации требуется UID серийной версии в реализованном классе?

Это не "требует" этого вообще. Это дополнительная функция.

SerialVersionUID используется как элемент управления версиями в классе Serializable. Если вы явно не объявите serialVersionUID, JVM сделает это за вас автоматически, основываясь на различных аспектах вашего сериализуемого класса, как описано в Спецификации сериализации объектов Java(TM).

Другие вопросы по тегам