2012-06-12 2 views
-1

Можно создать дубликат:
Serialization version uid in JavaserialVersionUID в Java

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

чэн

+0

@jalopaba Благодарим за внимание. Возможно, есть способы объединить два вопроса. – cheng

+0

Странно, что я получил нижний предел в ответе в другом вопросе :-) – jalopaba

+0

Слишком плохо ... Я нашел ваш ответ полезным и проголосую за него. – cheng

ответ

5

serializedVersionUIDзаписывается в поток, даже если он является статическим.

Затем он используется для десериализации, чтобы сравнить его с той, которая имеется в текущей доступной версии класса.

Обратите внимание, что он не написан как часть каждого экземпляра, а как часть объекта ObjectStreamClass, который определяет класс для всех экземпляров в потоке, которые хотят его использовать.

+0

Можете ли вы предоставить свою ссылку на официальные документы java? – cheng

+0

BTW, это единственное статическое поле, написанное в потоке? – cheng

+0

http://docs.oracle.com/javase/6/docs/platform/serialization/spec/protocol.html#8299 Также см. Связанный дублированный вопрос. – Thilo

2

Class, что десериализуется находится в Classpath так что все эти данные известны.

Update (спасибо @Thilo):

"and equally importantly, the serializedVersionUID is written to the stream, even though it is static." – Thilo 
0

serialVersionUID извлекается из класса, который не хранится в экземпляре «serialized» object.it «хранится» в скомпилированном байт-коде, если он определен иначе, он вычисляется с использованием некоторого алгоритма.

См. Ниже код байта класса, который реализует интерфейс Serializable.

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