2009-11-17 4 views
0

Когда мы десериализируем объект, его очень трудно понять, как он восстанавливает объект в определенном состоянии? Он содержит какие-либо метаданные объекта?Сериализованный объект содержит метаданные?

+1

Как это связано с синхронизацией? – BalusC

+0

Извините неправильно напечатано, его сериализуемое, отредактирует его сейчас .. Спасибо – i2ijeya

+1

Спецификация сериализации здесь (http://java.sun.com/javase/6/docs/platform/serialization/spec/serialTOC.html) – skaffman

ответ

4

Когда объект сериализуется, класс объекта записывается в поток вместе с содержимым непереходных полей объекта. Deserializer попытается загрузить этот класс (и есть несколько механизмов для этого), а затем заполнить непереходные поля.

Протокол спецификации здесь: http://java.sun.com/javase/6/docs/platform/serialization/spec/protocol.html

Если в «метаданные» вы имеете в виду аннотаций на классе, то нет, они не сериализовать самого объекта, но доступны на классе. Если вы имеете в виду что-то еще, пожалуйста, опишите, что вы имеете в виду.

+0

Reckon что каждый сериализованный объект имеет свои собственные метаданные и ссылается на то, что данные из десериализации потока происходят. «Метаданные», о которых я упоминал здесь, - это информация об атрибутах объекта. – i2ijeya

+0

Если вы не можете описать «метаданные» с точки зрения специфических особенностей языка Java, ответ «возможно» – kdgregory

0

На высоком уровне поток сериализации содержит данные внутри объекта и имя соответствующих классов, а также номер версии, чтобы гарантировать, что класс не изменился. Он использует эту информацию для создания нового экземпляра объекта и заполняет его теми же данными, что и старый экземпляр. Это позволяет избежать всех обычных ограничений на создание объектов (например, необходимость вызова конструкторов).

Одна путаница, которую люди имеют, состоит в том, что они могут думать, что определение класса само сериатируется. Это не так, просто данные, которые он содержит с достаточной информацией, чтобы знать, какие объекты воссоздавать при десерилировании. Когда объект десериализован, он должен соответствовать существующему классу в пути к классу, двоичные данные сериализации не содержат класс.

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