Маршалинг

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

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

Противоположный процесс называется демаршалингом (сходен с десериализацией).

Применение[править | править код]

Маршалинг применяется при передаче данных между процессами и/или потоками, например:

  • при использовании различных механизмов RPC;
  • при использовании P/Invoke на платформе .NET Framework (при переходе от неуправляемого типа в тип CLR);
  • в скриптах и приложениях, применяющих технологию XPCOM, поставляемую в составе Mozilla application framework (MFA). Браузер Mozilla Firefox — одно из самых известных приложений, созданных с применением MFA. Применение MFA позволило скриптовым языкам использовать технологию XPCOM через Cross-Platform Connect (XPConnect).

Сравнение с сериализацией[править | править код]

В стандартной библиотеке языка Python термин «маршалинг» схож по значению с термином «сериализация»[1], но термины не являются синонимами в документе RFC 2713 («Schema for Representing Java(tm) Objects in an LDAP Directory»; октябрь 1999 года), на который опирается стандарт языка Java:

«Маршализовать» объект означает записать его состояние и кодовую(ые) базу(ы) [2] (URI указывающий на расположение кода класса объекта для загрузки) таким образом, чтобы при обратной операции получалась копия оригинала, предположительно с помощью автоматической загрузки определения класса объекта. Вы можете маршализовать любой объект, который является сериализуемым или удалённым (…). Маршалинг подобен сериализации, за исключением того, что при маршалинге указывается расположение исполняемого кода. Маршалинг отличается от сериализации тем, что маршалинг особым образом применяется к удалённым объектам, для которых не создается копия самого объекта, а лишь указывается удаленный адрес по которому должна производится работа с ним.

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

Сетевые протоколы[править | править код]

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

Примечания[править | править код]

  1. Модуль маршалинга для Python
  2. Под кодовой базой здесь понимается не общеупотребительное значение, а специфическое для Java - набор URI, указывающих на расположение удалённого исполнимого кода для взаимодействия с удалённым объектом

Ссылки[править | править код]

См. также[править | править код]