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

20

... и демаршализацию / десериализацию? Объяснение из Википедии не оставляет меня равнодушным! Я программист на Java, если терминология используется по-разному в разных языках.

накипь
источник

Ответы:

30

Семантика здесь важна:

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

Сериализация подразумевает преобразование данных в некоренное промежуточное представление. Например: преобразование Java-объекта в JSON или XML.

Конечно, большинство систем, которые маршалируют данные, перед их транспортировкой сериализуют их в какой-то не родной формат.

JimmyJames
источник
13

Этот вопрос был задан ранее, но на StackOverflow. Вот ссылка.

Цитата ответа Джеффри Хантина :

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

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

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

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

alegen
источник
2

Маршаллер делает все, что ему нужно, чтобы создать структуру данных для переноса из одного места в другое. Когда я говорю о «структуре данных», это может быть что угодно. От самого объекта (state data => значения поля) до ссылки в памяти на этот объект, который будет обрабатываться на стороне клиента «заглушкой», а на стороне сервера - «прокси». Это означает, что Marshaller мог бы использовать «Сериализаторы», чтобы преобразовать эту структуру данных в представление низкого уровня, которое намного легче транспортировать. Путь преобразования может иметь другие компоненты, такие как Компрессоры, Компиляторы, Адаптеры и т. Д. Для меня Сериализатор является частью Marshaller.

HABOT QDroid
источник