web-dev-qa-db-ja.com

マーシャラーとシリアライザーの違いは何ですか?

...そして非整列化/逆シリアル化? ウィキペディアの説明 賢明に私を置き去りにする!私はJavaプログラマーです。異なる言語で異なる用語が使用されている場合に備えて。

21
spume

ここでは意味論が重要です。

マーシャリングは移動データを意味し、ネイティブ表現またはストレージからデータを変換することを意味しません。 Javaオブジェクトは、ネイティブ表現でネットワークを介してマーシャリングできます。

シリアライズとはtransformingデータをネイティブでない中間表現に変換することを意味します。たとえば、JavaオブジェクトをJSONまたはXMLに変換します。

もちろん、ほとんどのシステムではMarshal data、Serializeそれをトランスポートする前に非ネイティブ形式に変換します。

31
user7519

この質問は以前に尋ねられましたが、StackOverflowについてです。 ここ はリンクです。

Jeffrey Hantinによる回答の引用:

マーシャリングとシリアル化は、リモートプロシージャコールのコンテキストでは大まかに同義ですが、意図的には意味的に異なります。

特に、マーシャリングとは、ここからパラメータを取得することであり、シリアライゼーションとは、構造化データをバイトストリームなどのプリミティブフォームとの間でコピーすることです。この意味で、シリアル化はマーシャリングを実行する1つの手段であり、通常は値渡しのセマンティクスを実装します。

オブジェクトを参照でマーシャリングすることもできます。その場合、「ネットワーク上の」データは、元のオブジェクトの単なる位置情報です。ただし、そのようなオブジェクトはまだ値のシリアル化が可能です。

@Billが言及するように、コードベースの場所やオブジェクト実装コードなどの追加のメタデータが存在する場合があります。

13
alegen

マーシャラーは、ある場所から別の場所に転送されるデータ構造をキャストするために、必要なことをすべて実行します。 「データ構造」といえば何でもいいです。オブジェクト自体(状態データ=>フィールド値)から、クライアント側で「スタブ」によって処理され、サーバー側で「プロキシ」によって処理されるそのオブジェクトへのメモリ参照。これは、マーシャラーが「シリアライザー」を使用して、そのデータ構造を低レベルの表現に変換し、より簡単に転送できることを意味します。変換パスには、コンプレッサー、コンパイラー、アダプターなどの別のコンポーネントを含めることができます。私にとって、シリアライザーはマーシャラーの一部です。

2
HABOT QDroid