В чем разница между сериализацией и маршалингом?

Если вы ищете подсветку синтаксиса в редакторе в браузере, попробуйте CodeMirror .

450
задан Community 23 May 2017 в 12:26
поделиться

5 ответов

Маршалинг и сериализация являются слабо синонимичными в контексте удаленного вызова процедуры, но семантически различаются в зависимости от намерения.

В частности, маршалинг касается получение параметров отсюда туда, а сериализация - это копирование структурированных данных в или из примитивной формы, такой как поток байтов. В этом смысле сериализация является одним из способов выполнения маршалинга, обычно реализуя семантику передачи по значению.

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

Как упоминает @Bill, могут существовать дополнительные метаданные, такие как расположение базы кода или даже код реализации объекта.

369
ответ дан 22 November 2019 в 22:50
поделиться

Из Marshalling (информатика) Статья в Википедии:

Термин «маршал» считается синонимом «сериализации» в стандартной библиотеке Python 1 , но термины не являются синонимами в RFC 2713, связанном с Java:

«Маршал» объекта означает записать его состояние и кодовую базу (ы) таким образом, что при маршалинге объекта "unmarshalled", копия оригинального объекта получается, возможно, автоматически загружая определения класса объекта. Вы можете маршалировать любой объект, который можно сериализовать или удалить. Маршаллинг подобен сериализации, за исключением того, что маршаллинг также записывает кодовые базы. Маршаллинг отличается от сериализации тем, что маршаллинг специально обрабатывает удаленные объекты. (RFC 2713)

Для «сериализации»

92
ответ дан 22 November 2019 в 22:50
поделиться

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

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

При этом, как правило, они являются синонимами.

18
ответ дан 22 November 2019 в 22:50
поделиться

Маршаллинг обычно находится между относительно тесно связанными процессами; Сериализация не обязательно имеет такое ожидание. Так, например, при распределении данных между процессами вы можете просто отправить ссылку на потенциально дорогие данные для восстановления, тогда как при сериализации вы хотели бы сохранить все это, чтобы правильно воссоздать объект (ы) после десериализации.

4
ответ дан 22 November 2019 в 22:50
поделиться

Думайте о них как о синонимах, оба имеют производителя, который отправляет данные потребителю ... В конце поля экземпляров записываются в поток байтов, а другой конец - против вспять и вверх с теми же экземплярами.

NB - Java RMI также содержит поддержку транспортировки классов, отсутствующих в получателе ...

0
ответ дан 22 November 2019 в 22:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: