0

このリンクから、Java にはいくつかの種類の XML パーサーがあることがわかりました。メモリ消費量が少なく、動作が速いものを選択するのを手伝ってくれませんか?

DOM XML Parser
SAX XML Parser
JDOM XML Parser
JAXB

XML を使用してネットワーク経由で通信する C クライアントで Java サーバー アプリケーションを作成したいと考えています。JAXB を使用することを選択した場合、それを簡単に統合できますlibxmlか? libxmlJAXB を使用してアプリケーション間でデータを転送すると、どのような問題が発生する可能性がありますか?

4

3 に答える 3

2

これらはより多くの解析手法であり、実際の解析ツールではありません。Xerces は解析ツールの一例です。

SAX は、速度と解析イベント処理に適しています。イベントからの解析により、興味のないイベントを簡単にスキップできます。スキップした場合のペナルティは低くなります。ドキュメント全体が読み取られている間は、ドキュメントを保存する必要がないため、SAX はシステム メモリよりも大きなドキュメントを処理できます。

DOM は、ドキュメント全体をメモリに保持するのに適しています。そうすることで、ドキュメントのすべての要素を必要とする作業 (相互参照など) を簡単に行うことができます。この便利さには代償が伴います。SAX とは異なり、ドキュメント全体を保持するのに十分なメモリが必要です。

JDOM は基本的に DOM ですが、プログラミング インターフェイスが異なります。それが何を意味するにせよ、そのプログラミング インターフェイスは Java とより一致していると思われます。

JAXP は、SAX および DOM インターフェースをプラグ可能な方法で含む XML 処理ツールのスイートであり、バックエンドの実装を簡単に交換できます。

JAXB は、XML から通常の Java オブジェクトへの便利なマッピング、および通常の Java オブジェクトからの XML の生成を提供する一連の XML 処理ツールです。

個人的には SAX が好きですが、SAX で効率的に解析するには、スタックと、スタックにプッシュされスタックからポップされるコンテキスト依存のパーサー チャンクを使用して、XML がマップされたオブジェクトを生成する必要があります。アイデアは、ドキュメント内の位置を StringBuffer として維持し、ハンドラーをプッシュして入力要素を処理し、適切な終了イベントが検出されるまですべてのイベントを処理するというものです。次に、上記のハンドラーは、ポップされたサブハンドラーからオブジェクトを読み取ります。このような手法には少し手間がかかりますが、SAX の速度と DOM の利便性を橋渡しして、(「ノード」のツリーではなく)独自のオブジェクト ツリーを作成できます。

于 2012-06-15T15:05:12.493 に答える
1

メモリの使用量を減らしたい場合は、SAX を使用します。これは、イベント ベースの解析ユーティリティです。XML ファイル全体が DOM オブジェクトのようにメモリに読み込まれるわけではありません。保存したいものをメモリに保存します。SAX のもう 1 つの利点は、必要なイベントのみを制御できることです。これにより、解析速度が大幅に向上します。

于 2012-06-15T15:04:51.617 に答える
1

DOM はより多くのメモリを使用します。xml DOM モデル全体をメモリ内に作成する必要があります。したがって、SAXまたはSTAXを使用すると、必要なものを解析してメモリを節約できます。

JAXB を使用すると、Bean から xml およびその逆への自動マッピングが可能になります。

于 2012-06-15T15:07:16.370 に答える