UID серийной версии не хранится в объектах; это статическое поле, поэтому оно хранится в определении класса. Случается, что когда вы сериализуете объект, информация о его классе также должна быть сохранена; в противном случае не было бы способа un-serialize объекта. Информация, хранящаяся в классе, включает его имя и его UID последовательной версии.
Вы можете прочитать весь протокол здесь: http://docs.oracle.com/javase/6/docs/platform/serialization/spec/protocol.html
В общем, запись для нового объекта именно:
newObject:
TC_OBJECT classDesc newHandle classdata[]
Здесь classDesc
является дескриптор класса, который может быть либо декларация нового класса, нулевой ссылки или ссылки на ранее объявленного класса:
classDesc:
newClassDesc
nullReference
(ClassDesc)prevObject
Провозглашение нового класса устанавливает имя и серийные версии UID Класса в, дескриптор, который может быть использован для обозначения к нему позже, а также дополнительной информации о классе, зашифрованной classDescInfo
:
newClassDesc:
TC_CLASSDESC className serialVersionUID newHandle classDescInfo
@downvoter: Можете ли вы прокомментировать свой downvote? – jalopaba
«относительный» нижний план. Должен был удостовериться, что лучший ответ Джири идет сверху (иначе не было бы ниспроверено). Вы полностью игнорируете суть вопроса, каким образом JVM знает версию сериализованных данных (если UID для нее не записывается в поток, что, конечно, есть, хотя это статическое поле). – Thilo