XMLStreamReader を使用して xml タグのバイト オフセットを正確に収集する方法はありますか?
ランダム アクセスが必要な大きな xml ファイルがあります。すべてをデータベースに書き込むのではなく、XMLStreamReader を使用して 1 回実行し、重要なタグのバイト オフセットを収集してから、RandomAccessFile を使用して後でタグの内容を取得できるようにしたいと考えています。
XMLStreamReader には、文字オフセットを追跡する方法がないようです。代わりに、読み取られたバイト数を追跡するリーダーに XmlStreamReader をアタッチすることをお勧めします (たとえば、 apache.commons.ioによって提供される CountingInputStream )。
例えば:
CountingInputStream countingReader = new CountingInputStream(new FileInputStream(xmlFile)) ;
XMLStreamReader xmlStreamReader = xmlStreamFactory.createXMLStreamReader(countingReader, "UTF-8") ;
while (xmlStreamReader.hasNext()) {
int eventCode = xmlStreamReader.next();
switch (eventCode) {
case XMLStreamReader.END_ELEMENT :
System.out.println(xmlStreamReader.getLocalName() + " @" + countingReader.getByteCount()) ;
}
}
xmlStreamReader.close();
残念ながら、上記のコードは複数のタグに対して同じバイト オフセットを出力するため、何らかのバッファリングが行われているに違いありません。xml ファイルのバイト オフセットを追跡するより正確な方法はありますか (理想的には、適切な xml 解析を放棄することはありません)。