有没有办法使用 XMLStreamReader 准确地收集 xml 标签的字节偏移量?
我有一个需要随机访问的大型 xml 文件。我不想将整个内容写入数据库,而是希望使用 XMLStreamReader 运行一次以收集重要标签的字节偏移量,然后稍后能够使用 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 解析)?