web-dev-qa-db-ja.com

Javaシリアライゼーションvs JSON vs XML

ネットワークを介して転送されるオブジェクトを処理するときに、どのシリアル化メカニズムを選択すればよいのでしょうか。長所と短所は何ですか?

JSONXMLまたはAJAXを使用することはほとんどの場合知っています。転送フォーマットはかなりJavascriptフォーマットであり、さらにJSONはフットプリントが小さいのでかなり軽量なので、Javaシリアル化は完全にテーブルから外れますか?

29
peter

一般に重要な質問は、どのノードがシリアル化されたオブジェクトを受け取るかです node-js)、Javaクライアント、不明/複数のクライアントなどのブラウザ/ JavaScriptエンジン。

JSON-JSON構文は基本的にJavaScriptであるため、JSエンジンを備えたすべてのコンポーネントがその構文解析を非常にうまく処理します。複雑なデータ構造であっても、「生きている」オブジェクトに効率的に変換されます。 JSONパーサーは事実上すべての言語に対応しており、JSエンジンを使用しない場合でも簡単に使用できます(たとえば、JSONを対応するオブジェクトに簡単に変換できるGoogle Gsonを使用してください)。これは、言語間の通信に適した候補です-たとえば---(メッセージングアーキテクチャ の場合。

XML-言語の違い、軽量など、JSONの多くの利点を共有します。たとえば、Adobe Flexは、JSONよりもXMLを非常にうまく処理します。それは間違いなくJSONの適切な代替品です。個人的には、JSのような構文ではJSONを好みますが、XMLも優れています。

Javaシリアライゼーション-JavaからJavaへの通信のみを考慮してください。重要な注意点は、クラス定義が送信側と受信側にあり、オブジェクト全体を渡すことで多くのことを得ることができないことです。 RMIを通信プロトコルとして除外するつもりはありません。RMIは開発を単純化します。ただし、結果のアプリケーションコンポーネントはハードカップリングされるため、交換が非常に困難になります。

もう1つの注意事項-一般に、シリアライゼーションにはオーバーヘッドがあります。ただし、通信がネットワークを介して実行される場合、ボトルネックは多くの場合、シリアライゼーション/デシリアライゼーション自体ではなくネットワークです。

19
Ariel T

場合によります。 httpリクエストなどを送信する場合は、JSONまたはXMLが明らかに適しています。 Javaオブジェクトをtcpソケット経由でいくつかの分散アルゴリズムまたは何かのために送信している場合、Javaシリアライゼーションの方が簡単/優れている

6
user12345613

ネットワークを介したシリアル化では、xmlとjsonの両方が機能します。それはこの情報の消費者に依存します。

  • コンシューマーがAjaxを使用して情報を要求し、画面に何かをレンダリングするブラウザーである場合、一般にjasonはJavascriptオブジェクト形式であるため、Javascript互換オブジェクトに変換するオーバーヘッドがないため、最善の策です。実際、多くのAjaxライブラリ(jQueryなど)はjsonを適切にサポートしています。

  • コンシューマがJavaであるかどうかにかかわらず別のアプリケーションである場合、xmlが優先されるシリアル化メカニズムです。 Webサービスはxmlを非常に頻繁に使用します。

  • あなたの消費者が別のJavaプログラムである場合、間違いなくJavaシリアライゼーションが推奨されるオプションです(RMIなど)。したがって、まだ出ていません:-)。

しかし、はい、XMLとJsonの間には不明瞭な線があります。ここで私が述べたのは一般的な慣行です。これが 素敵な記事 xmlとjasonのすべての側面を示したものです。

4
Santosh

開発者としては、レスポンスオブジェクトのシリアル化を処理する必要はないと思います。しかし、JSONを考えると、XMLよりも有利な選択があります。

  1. JSONレスポンスは、XMLのようにエンコードされたレスポンスを必要としません。
  2. jSONの処理と処理は、解析されないため、XMLに比べて高速です。
  3. AJAX=のXML応答は常にエンコードされるため、処理に時間がかかります。
  4. JSONは、UI関連のコーディングのJqueryに最適で、高速です。
  5. 巨大なデータの処理(例:サーバーへの、またはサーバーからのインデックス作成データのフェッチ、JSON処理の高速化)。
1
chaosguru