Представление Java сериализованных объектов - PullRequest
7 голосов
/ 01 октября 2009

Я ищу формат, который Java использует для сериализации объектов. Сериализация по умолчанию сериализует объект в двоичном формате. В частности, мне любопытно узнать, могут ли два запуска программы сериализовать один и тот же объект по-разному.

Какому условию должен удовлетворять объект, чтобы объект поддерживал свое поведение в соответствии с сериализацией / десериализацией Java в оба конца?

Ответы [ 7 ]

10 голосов
/ 01 октября 2009

Требуется спецификация сериализации Java-объекта на http://java.sun.com/javase/6/docs/platform/serialization/spec/protocol.html.

2 голосов
/ 01 октября 2009

Если у вас есть два объекта, для которых все свойства имеют одинаковые значения, они будут сериализованы одинаково.

Если бы это не было повторяемым, то это было бы бесполезно!

1 голос
/ 01 октября 2009

Мне нравится пример Object.hashCode () @Stephen C. Если такие недетерминированные хэш-коды сериализуются, то при десериализации хэш-коды будут бесполезны. Например, если мы сериализуем HashMap, который работает на основе Object.hashCode (), его десериализованная версия будет вести себя иначе, чем исходная карта. То есть поиск одного и того же объекта дал бы нам разные результаты на двух картах.

1 голос
/ 01 октября 2009

Обычно запуск одного и того же однопоточного алгоритма с теми же данными приводит к тому же результату.

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

1 голос
/ 01 октября 2009

Они всегда будут сериализовать его одинаково. Если бы это было не так, не было бы никакой гарантии, что другая программа сможет десериализовать данные корректно, отказавшись от цели сериализации.

0 голосов
/ 01 октября 2009

Если вам не нужен двоичный файл, вы можете использовать JSON (http://www.json.org/example.html) в Java http://www.json.org/java/

Или XML по этому вопросу http://www.developer.com/xml/article.php/1377961/Serializing-Java-Objects-as-XML.htm

0 голосов
/ 01 октября 2009

Я ищу формат, который Java используется для сериализации объектов.

Не будь глупым, он их как-то пишет. Как именно это может и, вероятно, должно быть определено вами. Персонаж сопоставляется с ... э-э, он включается, но вместо того, чтобы заново изобретать колесо, позвольте нам спросить, что конкретно вам нужно иметь для реконструкции объекта до какого состояния?

Сериализация по умолчанию сериализуется объект в двоичном формате.

Так? (опять же, не пытаясь быть глупым - звучит так, как будто нам нужно определить проблему, которая может не иметь данных)

Мне любопытно узнать, программа может сериализовать один и тот же объект по-разному.

Если бы у вас был Поток информации, как бы вы определили, в какие состояния необходимо восстановить объект?

...