Что такое маршаллинг объектов? - PullRequest
47 голосов
/ 30 сентября 2008

Я слышал, что эта концепция часто используется, но я не совсем понимаю, что это такое.

Ответы [ 9 ]

34 голосов
/ 30 сентября 2008

Преобразование объекта в памяти в формат, который можно записать на диск или отправить по проводам и т. Д.

Описание Википедии .

33 голосов
/ 30 сентября 2008

Я позволю себе не согласиться, Википедия довольно ясно об этом.

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

http://en.wikipedia.org/wiki/Marshalling_(computer_science)

10 голосов
/ 30 сентября 2008

Люди уже достаточно четко определили сортировку, поэтому я пропущу определение и перейду к примеру.

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

4 голосов
/ 30 сентября 2008

Marshalling - это процесс преобразования представления объекта в памяти в формат данных, который может быть сохранен или передан. Это также называется сериализация (хотя в некоторых контекстах это может отличаться). Представление объекта в памяти может быть сохранено в двоичном формате или в формате XML или в любом другом формате, подходящем для хранения и / или передачи таким образом, чтобы вы могли его разархивировать и вернуть исходный объект.

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

srcplayer = Player.new
# marshal (store it as string)
str = Marshal.dump(srcplayer)
#unmarshal (get it back)
destplayer = Marshal.load(str)
4 голосов
/ 30 сентября 2008

Я уточнил в поиске Google «маршалинг данных», и первое попадание было в каком-то месте под названием webopedia , что довольно неплохо. Суть в том, что вы преобразуете данные назад и вперед в форму для таких вещей, как передача по сети. Проблема, которую он решает, заключается в том, что вы не можете передавать данные по сети в форме, которая может использоваться программой. Вам необходимо решить ряд вопросов, включая такие, как порядок байтов данных, способ хранения сложных типов данных, таких как строки и т. Д.

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

3 голосов
/ 30 сентября 2008

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

Например, в .NET для взаимодействия между управляемым и неуправляемым кодом (например, доступ к определенным API-интерфейсам win32), вероятно, потребуется маршаллинг для преобразования туда и обратно между управляемыми объектами C # и объектами стиля C / C ++ (структуры, дескрипторы, буферы вывода и т. д.) Может помочь справка по статическому классу маршала .

2 голосов
/ 30 сентября 2008

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

Еще один пример из повседневной жизни - JSON

1 голос
/ 30 сентября 2008

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

1 голос
/ 30 сентября 2008

Это означает превращение любых данных в другой тип данных для передачи в другую систему.

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

...