3

DOM を使用して Java で XML ドキュメントを処理すると、多数の反復ノード、属性、または値を含むドキュメントのメモリを大量に消費する可能性があります。

flyweight-pattern を内部的に利用してメモリフットプリントを最小限に抑える Java XML DOM API を知っている人はいますか? たぶん、構成可能/有効/無効にすることもできますか?

4

3 に答える 3

1

フライ級のパターンって本当ですか?それとも、遅延読み込み (または「遅延解析」) のようなことを考えましたか? flyweight パターンを使用するには、パーサーが同じコンテンツ (および構造) を持つ要素を認識する必要があります。それは時間のかかる操作になります (そして、スペースも消費するのではないかと心配しています)。さらに、パーサーはどの深さでフライウェイトを認識し始める必要がありますか?

実際、flyweight を認識する DOM パーサーがあるとは思えません。また、遅延読み込みを使用する DOM パーサーもありません。これが DOM の性質です。XML ファイル全体を解析し、非常に柔軟でランダムなナビゲーションのためのデータ構造を生成します。

SAXまたはStAXを使用して、実際にストリーミング プロセスに切り替えることができるかもしれません。もちろん、「その場で」要素を処理する必要があるため、柔軟でランダムなナビゲーションの機能が失われます。

ただし、 VTD-XMLというパーサーがあります。これは、メモリ効率を考慮して開発されました。また、XML ファイル全体をメモリにロードし、要素間を移動するためのいくつかのメソッドを提供します。ただし、注意してください: このナビゲーションはいくぶん複雑で、あまり直感的ではありません (メモリ効率の高い格納の性質のため)。でもこれなら使えるかも。

于 2013-07-11T13:05:20.303 に答える
0

私はそのような DOM パーサーを知りません (存在しないという意味ではありません)。ただし、StAXパーサーは検索対象に近い可能性があります。

于 2013-07-11T13:00:11.487 に答える
-1

DOM ではありませんが、SAX(javax.xml.parsers.SAXParser) が役立つはずです。

SAX を使用した XML ファイルの解析

于 2013-07-11T12:48:21.797 に答える