forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Алгоритмика (http://forum.boolean.name/forumdisplay.php?f=21)
-   -   Сериализация vs Маршалинг (http://forum.boolean.name/showthread.php?t=16401)

impersonalis 27.02.2012 11:35

Сериализация vs Маршалинг
 
Окончательно запутался в разнице между двумя терминами после прочтения дополнительного объёма литературы.
Насколько я понял: маршалинг, в отличие от сериализации, подразумевает запись не только некоторых значений, однозначно характеризующих объект, но и структуру, позволяющую восстановить информацию о том, какой именно объект был сериализован. Т.о. маршалинг это более абстрактный механизм сериализации, позволяющий не заботиться о том, знает ли парсер структуру объекта.
Поправьте, если заблуждаюсь!

pax 27.02.2012 13:16

Ответ: Сериализация vs Маршалинг
 
Думаю различия в области применения, а по сути одно и то же.

HolyDel 27.02.2012 14:07

Ответ: Сериализация vs Маршалинг
 
запутался сам - запутай комьюнити :)

я всегда считал - что сериализация это для сохранения с последующим восстановлением, маршалинг - для передачи данных от одной системы к другой. на деле все оказалось сложнее, теперь и я запутался :)

ffinder 27.02.2012 14:16

Ответ: Сериализация vs Маршалинг
 
Цитата:

Сообщение от impersonalis (Сообщение 220731)
Насколько я понял: маршалинг, в отличие от сериализации, подразумевает запись не только некоторых значений, однозначно характеризующих объект, но и структуру, позволяющую восстановить информацию о том, какой именно объект был сериализован. Т.о. маршалинг это более абстрактный механизм сериализации, позволяющий не заботиться о том, знает ли парсер структуру объекта.
Поправьте, если заблуждаюсь!

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

impersonalis 27.02.2012 15:47

Ответ: Сериализация vs Маршалинг
 
Цитата:

Сообщение от ffinder (Сообщение 220740)
вот маршалинг это такой переходник

т.е. маршалинг это адаптер? обёртка? межинтерфейсное преобразование?
В то время как сериализация это просто преобразование в последовательность байт?

SBJoker 27.02.2012 16:24

Ответ: Сериализация vs Маршалинг
 
Сериализация это описание данных, не только значений но и названий этих данных и часто указание типа.

impersonalis 27.02.2012 17:53

Ответ: Сериализация vs Маршалинг
 
т.е.
Цитата:

Сообщение от impersonalis (Сообщение 220731)
запись не только некоторых значений, однозначно характеризующих объект, но и структуру, позволяющую восстановить информацию о том, какой именно объект был сериализован.

?
Иными словами я просто поменял значения терминов местами?

impersonalis 27.02.2012 18:23

Ответ: Сериализация vs Маршалинг
 
Итак:
pax
Сериализация=Маршалинг
ffinder
маршалинг=адаптер
SBJoker
Сериализация это описание данных, не только значений но и названий этих данных и часто указание типа.
Цитата:

Сообщение от http://ru.wikipedia.org/wiki/Маршалинг
«Маршализовать» объект означает записать его состояние и кодовую(ые) базу(ы) таким образом, чтобы при обратной операции получалась копия оригинала, предположительно с помощью автоматической загрузки определения класса объекта. Вы можете маршализовать любой объект, который является сериализуемым или удаленным. Маршалинг подобен сериализации, за исключением того, что при маршалинге записываются кодовые базы. Маршалинг отличается от сериализации тем, что маршалинг особым образом применяется к удаленным объектам. (RFC 2713)


ffinder 27.02.2012 18:32

Ответ: Сериализация vs Маршалинг
 
в вики написан какой-то бред, либо очень специфичное понятие для какого-то конкретного языка программирования или фреймворка.
под "кодовой базой" видимо имеется в виду codebase - исходники.
вообще то, что описано в цитате имеет очень много связи с кодогенерацией, что к маршалингу уже отношения не имеет.

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

SBJoker 27.02.2012 19:05

Ответ: Сериализация vs Маршалинг
 
ИМХО в простейшем случае маршалинг это тупо кусок памяти объекта записанный в файл и/или переданный по сети. Для восстановления объекта достаточно сделать мемкопи из прочитанного в указатель объекта и он снова возродится.

Конечно это простейший случай без полей-указателей.

Сериализация - данные с описанием как и куда их пристроить. Например plist в Mac OS пример сериализации данных любой структуры или класса. Которая может быть обратно прочитана в такой класс или структуру, но и в любой другой.

Всё выше ИМХО.

pax 28.02.2012 00:04

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

Так что я бы сказал что это:
Цитата:

Сообщение от impersonalis (Сообщение 220731)
Т.о. маршалинг это более абстрактный механизм сериализации, позволяющий не заботиться о том, знает ли парсер структуру объекта.

относится к сериализации. Т.е. все наоборот.

impersonalis 11.06.2012 00:59

Ответ: Сериализация vs Маршалинг
 
Сперва, просто читаем (до конца и спокойно):

http://www.gunsmoker.ru/2011/09/blog-post_9471.html :
Цитата:

Почти синонимом термина "сериализация" является маршалинг (от англ. marshal — упорядочивать). Обратный процесс - демаршалинг (аналог десериализации). Маршалинг - более общее понятие, чем сериализация. Всякая сериализация является частным случаем маршалинга. Отличие маршалинга от сериализации в том, что сериализация предполагает упаковку лишь данных программы. Скажем, матрицы чисел, записи о сотруднике в картотеке или таблицы высот игрового уровня. Когда говорят про маршалинг, подразумевают сериализацию не только данных программы, но и её программного состояния, мета-информации. К примеру, сериализация объекта с полями запишет лишь данные объекта (поля). Маршалинг же объекта запишет не только информацию о его данных (полях), но и информацию по восстановлению структуры объекта - класс объекта, либо же его мета-информацию для реконструирования типа.

Маршалируя и демаршалируя объект вы создаёте его полную копию. При этом принимающая сторона может ничего не знать про объект.
http://www.gotdotnet.ru/forums/2/28864/143256/ :
Цитата:

чтобы отмаршилить, в частности,
ссылочный тип по значению его надо сериализовать. То есть для того,
чтобы поддержать протокол вызова, нужно перевести его параметры к
описанному инвариантному виду, то есть например в двоичный поток или
xml-документ. После того, как все данные подготовлены, их можно собирать
в пакет (например, SOAP), что и делает наш ненаглядный маршалинг в своем
общем виде.
Итого, маршалинг — тот большой дядька, который контролирует и
определяет, как будут передаваться данные. Сериализация — это метод,
которым пользуется маршалинг для осуществления своего темного дела.
http://www.intuit.ru/department/se/msfdev/2/2.html :
Цитата:

Весь описанный процесс называется маршализацией удаленного объекта по ссылке ( marshal by reference ). В отличие от маршализации по значению, экземпляр объекта находится в процессе сервера и не покидает его, а для доступа к объекту клиенты используют посредников. При маршализации же по значению само значение объекта сериализуется в набор байт для его передачи между процессами, после чего следует создание его копии в другом процессе.
http://www.webopedia.com/TERM/S/serialization.html :
Цитата:

The conversion of an object instance to a data stream of byte values in order to prepare it for transmission.
http://www.webopedia.com/TERM/D/data_marshalling.html :
Цитата:

The process of gathering data and transforming it into a standard format before it is transmitted over a network so that the data can transcend network boundaries. In order for an object to be moved around a network, it must be converted into a data stream that corresponds with the packet structure of the network transfer protocol. This conversion is known as data marshalling. Data pieces are collected in a message buffer before they are marshaled. When the data is transmitted, the receiving computer converts the marshaled data back into an object.

Data marshalling is required when passing the output parameters of a program written in one language as input to a program written in another language.
Если попытаться всё это переварить и осмыслить, то получить можно нечто подобное:

0) В зависимости от технологии (языка) и уровня абстракции (детализации) описания происходящего, значения терминов несколько размазываются вплоть до их полного слияния. (Так, например можно, с некоторыми оговорками, ввести в описание программы на Blitz3D термин "указатель", полностью приравняв его тем самым к понятию "ссылка")
1) Сериализация - процесс преобразования объекта в последовательность байт.
2) Маршалинг - процесс преобразования объектов (в их актуальных состояниях) для передачи между процессами.
3) В зависимсоти от типа маршалинга, понятие "объект" в пункте 1 меняется:
маршалинг по значению - объект=данные
маршалинг по ссылке - объект="данные с описанием как и куда их пристроить"

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

upd: Если посмотреть ещё абстрактней, то процесс сохранения в файл - тоже маршалинг: только разные процессы - это одна и та же программа запущенная в разные моменты времени. Тем не менее, сериализация может быть использована и без маршалинга - например, для сравнения двух объектов внутри одного процесса. Кроме того, наличие термина, позволяет структурно выделить процедуру из общей сложной схемы взаимодействия.

moka 12.06.2012 01:36

Ответ: Сериализация vs Маршалинг
 
Почему сериализация обязательно в последовательность байт?
Преобразование объекта в JSON объект (string) - не сериализация?

impersonalis 12.06.2012 17:26

Ответ: Сериализация vs Маршалинг
 
Отвечу в том же духе: стринг - не последовательность байт (слово - это тоже последовательность; а списки и прочие методы фрагментированного хранения - детали технической стороны реализации, не отрицающие представлений конечного программиста и скрытые от него за интерфейсом)?
А если серьёзно:
Цитата:

Сообщение от impersonalis (Сообщение 230042)
0) В зависимости от технологии (языка) и уровня абстракции (детализации) описания происходящего, значения терминов несколько размазываются

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

Опасался, что коммент будет более разгромным.

impersonalis 13.06.2012 21:21

Ответ: Сериализация vs Маршалинг
 
Оффто почищен (придирка замечание от MoKи оставлено, отспасиблено и прокоменчено). Тема закрыта, т.к., судя по времени существования треда и интеллектуальности оффтопа - добавить собравшимся нечего .


Часовой пояс GMT +4, время: 20:17.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot