Подтвердить что ты не робот

Объект сортирован и немаршален

Что подразумевается под маршалированием и демонтажом объектов? Каково влияние на состояние объекта при выполнении вышеуказанной операции, т. hashCode Влияние сериализации на hashCode и equals?

4b9b3361

Ответ 1

marshalling означает создание потока байтов, который содержит достаточно информации, чтобы иметь возможность повторно строить объект.

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

Копия, вероятно, будет иметь те же hashCode() и be equals() == true и compareTo() == 0 (при условии, что она будет сравниваться).

Ответ 2

В marshall объект должен преобразовать его в форму, подходящую для последовательного хранения или передачи; то есть преобразовать его из своей нативной формы в JVM-память в форму, которую можно отправить по проводке, вставить в файл/базу данных и т.д. Специфика будет варьироваться в зависимости от формы участия маршаллинга; Механизм сериализации Java по умолчанию является одним из способов, но преобразование объекта в представление XML или JSON одинаково справедливо.

Unmarshalling - это только обратная/другая сторона этого процесса; принимая представление объекта, созданного путем сортировки, и используя его для восстановления экземпляра объекта в JVM.


Я не уверен точно, что вы подразумеваете под другой частью вашего вопроса, если честно. Исходный объект обычно не изменяется путем сортировки (что концептуально является операцией только для чтения, например, для копирования). Так что hashcode и т.д. Остались бы неизменными.

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

Ответ 3

В С++, если вы вообще делаете хэш-код из блока памяти, в котором хранится объект, он, вероятно, будет отличаться от немаршалированных объектов.

Значения первого указателя различны. Второй указатель vtbl отличается из-за перемещения двоичного файла системным загрузчиком.

Ответ 4

Маршалинг почти такой же, как сериализация. Разница (в контексте Java) заключается в обработке удаленных объектов, как указано в rfc2713.

Как для значения хэш-кода: он зависит от того, как объект вычисляет свой хэш-код. Если он рассчитывается только из полей, то он, очевидно, такой же, как и немаршалированный объект, равный исходному. Но если он использует Object original hashCode, то он независимо от того, что JVM делает для этого объекта, и будет отличаться от экземпляра к экземпляру.

Ответ 5

Он предназначен для сохранения объектов или отправки их другому, например VM в мире Java. Объект будет реконструирован после маршалинга, чтобы быть тем же самым, если вы собрали всю информацию.

Вы можете, например, пометить поля, чтобы они потерялись в сериализации, и затем вы не можете полностью воссоздать объект.

Скорее всего, состояние потеряно, и это связано с тем, что вы обычно не сериализуете состояние, а только данные, хранящиеся в bean. например, вы сериализуете адрес поля. вы не сериализуете состояние "2 человека, который в настоящее время смотрит на объект".

Ответ 6

Marshalling преобразует данные, присутствующие в объекте, в формат xml и просматривает его в формате xml, а unmarshalling обращает его преобразование xml файла в объект