4

新しい要件があります。

いくつかのBIGxmlファイルがシステムに入ってきており、Javaを使用してそれらを迅速かつ迅速に処理する必要があります。ファイルは巨大ですが、処理に必要な情報は非常に小さい要素の中にあります。.....。

処理を開始する前に、巨大なファイルからデータのこの小さな部分を抽出するための最良の方法は何ですか。ファイル全体を読み込もうとすると、サイズが原因ですぐにメモリ不足エラーが発生します。ファイルを1行ずつロードまたは読み取ることなく、..data..data..data..データ要素を取得するために使用できるJavaの効率的な方法は何ですか。これを実行するために使用できるSAXパーサーはありますか?

ありがとうございました

4

4 に答える 4

4

SAX パーサーはイベント ベースであり、必要なことを実行するため、はるかに高速です。xml ドキュメントを完全に読み取るわけではありません。SAXParserJava ディストリビューションで利用できる があります。

于 2012-08-24T19:19:48.877 に答える
3

以前のプロジェクト (1G-2G) で巨大なファイルを解析する必要があり、SAX を使用して処理したくありませんでした。場合によっては、SAX が低レベルすぎると感じ、ほとんどの場合、トラバーサル アプローチを維持するのが好きです。

VTD ライブラリhttp://vtd-xml.sourceforge.net/を使用しました。これは、ポインターを使用してドキュメント内を移動する非常に高速なライブラリです。

于 2012-08-24T20:16:45.243 に答える
2

ファイルの一部を読み取りたい場合は、ファイルの各行読み取って、ファイルの目的の部分を識別し、必要なものを抽出できるようにする必要があります。

受信 XML のごく一部のみが必要な場合は、SAX を使用できます。また、特定の要素または属性のみを読み取る必要がある場合は、実装がはるかに簡単な XPath を使用できます。

Java には、組み込みの SAXParser 実装と XPath 実装が付属しています。SAXParser の Javadoc はこちらから、XPathの Javadoc はこちらからご覧いただけます

于 2012-08-24T19:25:01.660 に答える
2

StAXは、SAX のようにデータのストリーミングに基づく別のオプションですが、データを「プッシュ」するのではなく、必要なものを「プル」することでデータを処理する、より使いやすいアプローチ (IMO) の利点があります。

于 2012-08-24T20:13:17.920 に答える