2009-12-18 2 views
1

пожалуйста, помогите разъяснению сомнений:сериализации и VERSIONID

Во время выполнения сериализации, если мы определили идентификатор версии как

static final long serialVersionUID = 2L;, и так как это статичность он не должен получить сериализации при сохранении объекта в постоянная среда.

При чтении объекта с постоянной среды, как объект соответствует идентификатору версии, поскольку сериализованный объект не должен содержать его.

ответ

7

Сериализация сериализации добавляет класс объектов serialVersionUID к потоку объектов автоматически, это не рассматривается как «нормальное» поле экземпляра. Все это происходит под обложками.

1

serialVersionUID является исключением из правила, что «статические поля не сериализуются». ObjectOutputStream записывает каждый раз значение serialVersionUID в выходной поток. ObjectInputStream считывает его обратно, и если значение, считанное из потока, не согласуется с значением serialVersionUID в текущей версии класса, тогда оно выдает InvalidClassException. Более того, если нет serialVersionUID, официально объявленного в классе для сериализации, компилятор автоматически добавляет его со значением, сгенерированным на основе полей, объявленных в классе.

http://java.sun.com/j2se/1.5.0/docs/api/java/io/Serializable.html

Смежные вопросы