web-dev-qa-db-ja.com

オブジェクトのマーシャリングとは何ですか?

この概念が頻繁に使用されることを聞いたことがありますが、それが何であるかを本当によく理解していません。

49
Brian G

メモリ内のオブジェクトを、ディスクへの書き込みやネットワーク経由での送信などが可能な形式に変換します。

ウィキペディアの説明

35
Adrian

ウィキペディアはこれについてかなり明確です。

コンピュータサイエンスでは、マーシャリング(シリアライゼーションと同様)は、オブジェクトのメモリ表現を、格納または送信に適したデータ形式に変換するプロセスです。通常、コンピュータプログラムのさまざまな部分間でデータを移動する必要がある場合、またはプログラム間でデータを移動する必要がある場合に使用されます。

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

33
GEOCHET

マーシャリングはすでにかなり明確に定義されているため、ここでは定義をスキップして例にジャンプします。

リモートプロシージャコールはマーシャリングを使用します。リモート関数を呼び出すときは、引数を何らかの標準形式にマーシャリングして、ネットワークを介して転送できるようにする必要があります。

10
Alvin

私はグーグル検索を「データマーシャリング」に明確にし、最初のヒットは webopediaと呼ばれる場所で でした。これはかなり良いです。要点は、ネットワークを介した送信などの形式にデータを前後に変換することです。それが解決する問題は、プログラムが使用できる形式でネットワークを介して実際にデータを送信できないことです。データのエンディアン、文字列などの複雑なデータ型の格納方法など、多くの問題を解決する必要があります。

マーシャリングは、ネットワーク転送の問題だけでなく、あるアーキテクチャから別のアーキテクチャへの移行など、他の問題、特に異なる言語、特に仮想マシンなどを使用する言語、およびその他の「変換」の問題を解決することです。

4

マーシャリング は、オブジェクトのメモリ表現を、保存または送信できるデータ形式に変換するプロセスです。 serialization とも呼ばれます(特定のコンテキストでは異なる場合があります)。オブジェクトのメモリ表現は、バイナリまたはXMLとして格納できます。または、オブジェクトを非整列化して元のオブジェクトを取得できるように、格納や送信に適した任意の形式で格納できます。

使用例として、クライアントコンポーネントとサーバーコンポーネントを含むオンラインゲームがあり、プレーヤーの統計情報と世界座標を含むプレーヤーオブジェクトをクライアントからサーバーに(またはその逆に)送信したい場合は、単純にマーシャリングできます。それをクライアントで送信し、ネットワーク経由で送信し、もう一方の端で非整列化すると、サーバーからはオブジェクトがサーバー自体で作成されたように見えます。 Rubyの例:

srcplayer = Player.new
# marshal (store it as string)
str = Marshal.dump(srcplayer)
#unmarshal (get it back)
destplayer = Marshal.load(str)
4
Firas Assaad

マーシャリングは、アプリケーションの境界を越えて、または異なるデータ形式間でデータを転送するプロセスです。マーシャリングは非常に一般的です。たとえば、ディスクやデータベースへのデータの書き込みは技術的にマーシャリングですが、この用語は「外部」APIやプロセス間通信のデータ変換を表すために使用される傾向があります。

たとえば、.NETでは、マネージコードとアンマネージコード間の通信(特定のwin32 APIへのアクセスなど)は、マネージC#オブジェクトとC/C++スタイルオブジェクト(構造体、ハンドル、出力バッファー、など)静的 Marshalクラス のヘルプが役立つ場合があります。

3
Wedge

これは、データを別のデータタイプに変換して別のシステムに転送することを意味します。

たとえば、構造体をXMLドキュメントにマーシャリングしてWebサービスに送信したり、ポインターをマーシャリングして別のスレッドアパートメントに送信したりします。

2
gbjbaanb

基本的には、オブジェクト(または類似のもの)を別の表現に一般的に変換するための式です。たとえば、ネットワーク経由で送信したり、ディスクに保存したりできます(通常は文字列またはバイナリストリーム)。オブジェクト、または以前に存在していたメモリ内構造の表現と再作成。

現在のもう1つの例はJSONです

2
Olaf Kock

プログラミングにおける非常に一般的な意味では、データを1つの形式で取得し、それを他のサブシステムで受け入れ可能な形式に変換するだけです。

1
Josh