Маршалинг
Маршалинг (от англ. 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, указывающий на расположение кода класса объекта для загрузки) таким образом, чтобы при обратной операции получалась копия оригинала, предположительно с помощью автоматической загрузки определения класса объекта. Вы можете маршализовать любой объект, который является сериализуемым или удалённым (…). Маршалинг подобен сериализации, за исключением того, что при маршалинге указывается расположение исполняемого кода. Маршалинг отличается от сериализации тем, что он особым образом применяется к удалённым объектам, для которых не создается копия самого объекта, а лишь указывается удалённый адрес, по которому должна производиться работа с ним.
Оригинальный текст (англ.)[показатьскрыть]To "marshal" an object means to record its state and codebase(s) in such a way that when the marshalled object is "unmarshalled," a copy of the original object is obtained, possibly by automatically loading the class definitions of the object. You can marshal any object that is serializable or remote (…). Marshalling is like serialization, except marshalling also records codebases. Marshalling is different from serialization in that marshalling treats remote objects specially. (…) marshalling records the remote object's "stub", instead of the remote object itself.— RFC 2713
«Сериализировать» объект означает превращать его состояние в поток байтов таким образом, чтобы указанный поток мог быть преобразован обратно в копию исходного объекта.
Оригинальный текст (англ.)[показатьскрыть]To "serialize" an object means to convert its state into a byte stream in such a way that the byte stream can be converted back into a copy of the object.— RFC 2713
Сетевые протоколы
Применительно к компьютерным сетям маршалинг означает процесс преобразования данных в формат, в котором данные могут быть переданы по сети и могут пройти через сетевые ограничители. Данные преобразуются в поток байт, упаковываются, делятся на части, передаются по сети средствами сетевого протокола. Принятые данные преобразуются обратно в исходный формат.
Примечания
- Модуль маршалинга для Python
- Под кодовой базой здесь понимается не общеупотребительное значение, а специфическое для Java - набор URI, указывающих на расположение удалённого исполнимого кода для взаимодействия с удалённым объектом