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

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

Маршалинг и сериализация слабо ассоциированы в контексте удаленного вызова процедуры, но семантически разные в зависимости от намерения. В частности, маршалинг — это получение параметров здесь, а сериализация — о копировании структурированных данных в примитивную форму, например, в поток байтов или из нее. В этом смысле сериализация является одним из способов выполнения маршалинга, обычно использующего семантику pass-by-value. Также возможно, чтобы объект был маршалирован по ссылке, и в этом случае данные «на проводе» являются просто информацией о местоположении для исходного объекта. Тем не менее, такой объект может по-прежнему поддаваться оценке сериализации. Могут быть дополнительные метаданные, такие как местоположение базы кода или даже код реализации объекта.

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

Оба делают одну общую задачу — запаковывание объекта для передачи или хранения, но разница есть.

Сериализация
Когда вы сериализуете объект, в поток байтов записываются только данные элемента внутри этого объекта, а не код, который фактически реализует объект.
Маршаллинг
Термин маршаллинг используется, когда мы говорим о передаче объекта удаленным объектам (RMI). В Маршаллинге объект сериализуется (данные участника являются серийными) и присоедина CodeBase.

CodeBase — это информация, которая сообщает получателю объекта, где можно найти реализацию этого объекта. Любая программа, которая думает, что она может когда-либо передать объект другой программе, которая, возможно, не видела ее раньше, должна установить базу кода, чтобы получатель мог знать, где скачать код, если у него нет кода, доступного локально. Получатель при десериализации объекта извлекает из него кодовую базу и загружает код из этого места.

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

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

Чтобы «сериализовать» объект означает преобразовать его состояние в поток байтов таким образом, что поток байтов можно преобразовать обратно в копию объекта.

Итак, маршаллинг также сохраняет код объекта в потоке байтов в дополнение к его состоянию.

Маршаллинг — это правило, чтобы сообщить компилятору, как данные будут представлены в другой среде/системе. Поскольку вы можете видеть два разных строковых значения, представленных как разные типы значений.

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

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

Маршалинг использует процесс Serialization фактически, но главное отличие заключается в том, что в Serialization только члены данных и сам объект получают сериализованную не подписи, а в Marshalling Object + code base (ее реализация) также преобразуются в байты.