オブジェクトのマーシャリングとは何ですか?
-
03-07-2019 - |
質問
この概念は頻繁に使用されると聞きましたが、それが何であるかを本当によく把握していません。
解決
メモリ内のオブジェクトをディスクに書き込み可能な形式に変換したり、ネットワーク経由で送信したりすることができます。
他のヒント
異なることをお願いします。ウィキペディアはこれについてかなり明確です。
コンピュータサイエンスでは、マーシャリング (シリアル化と同様)は メモリを変換するプロセス データに対するオブジェクトの表現 ストレージに適した形式または 送信。通常使用されます 間でデータを移動する必要がある場合 コンピュータープログラムのさまざまな部分 または、あるプログラムから別のプログラムへ。
人々はマーシャリングをすでに明確に定義しているので、定義をスキップして例にジャンプします。
リモートプロシージャコールはマーシャリングを使用します。リモート関数を呼び出す場合、ネットワークを介して転送できるように、引数を何らかの標準形式にマーシャリングする必要があります。
" data marshalling"へのGoogle検索を明確にしました。最初のヒットは webopediaと呼ばれる場所でした。要点は、ネットワークを介した伝送などの形式にデータを変換することです。それが解決する問題は、プログラムで使用可能な形式でネットワークを介してデータを実際に送信できないことです。データのエンディアンネス、文字列などの複雑なデータ型の保存方法など、多くの問題を解決する必要があります。
マーシャリングは、ネットワーク伝送の問題を解決するだけでなく、あるアーキテクチャから別のアーキテクチャへの移行など、他の問題、特に仮想マシンのようなものを使用する言語、およびその他の「翻訳」などの問題も解決します。問題。
マーシャリングは、オブジェクトのメモリ表現を保存または送信できるデータ形式。また、シリアライゼーションとも呼ばれます(特定のコンテキストでは異なる場合があります)。オブジェクトのメモリ表現は、バイナリまたはXML、または保存および/または送信に適した任意の形式で保存できます。これにより、オブジェクトを非整列化し、元のオブジェクトを取り戻すことができます。
使用例として、クライアントコンポーネントとサーバーコンポーネントを備えたオンラインゲームがあり、プレーヤーの統計情報と世界座標を含むプレーヤーオブジェクトをクライアントからサーバーに送信する場合(またはその逆)、クライアントで単純にマーシャリングし、ネットワーク経由で送信し、もう一方の端でアンマーシャリングすれば、オブジェクトはサーバー自体で作成されたかのようにサーバーに表示されます。ルビーの例を次に示します。
srcplayer = Player.new
# marshal (store it as string)
str = Marshal.dump(srcplayer)
#unmarshal (get it back)
destplayer = Marshal.load(str)
マーシャリングは、アプリケーションの境界を越えて、または異なるデータ形式間でデータを転送するプロセスです。マーシャリングは非常に一般的です。たとえば、データをディスクまたはデータベースに書き込むことは技術的にマーシャリングですが、この用語は「外国」のデータ変換を表すために使用される傾向があります。 APIまたはプロセス間通信用。
たとえば、.NETでは、マネージドコードとアンマネージドコード間の通信(特定のwin32 APIへのアクセスなど)には、マネージC#オブジェクトとC / C ++スタイルオブジェクト(構造体、ハンドル、出力バッファなど)静的 Marshalのヘルプクラスが役立つかもしれません。
基本的には、オブジェクト(または同様のもの)を(たとえば)ワイヤ経由で送信したり、ディスクに保存したりする(通常は文字列またはバイナリストリーム)別の表現に一般的に変換するための式です。マーシャリングされた表現を読み取り、オブジェクトまたは以前に存在したメモリ内構造を再作成します。
別の現在の日常的な例はJSONです
プログラミングの非常に一般的な意味では、1つの形式でデータを取得し、他のサブシステムで受け入れ可能な形式に変換することを意味します。
これは、データを別のデータ型に変換して別のシステムに転送することを意味します。
たとえば、構造体をXMLドキュメントにマーシャリングしてWebサービスに送信するか、ポインターをマーシャリングして別のスレッドアパートメントに送信します。