gpt4 book ai didi

java - JAXB重复解析小xml文档

转载 作者:行者123 更新时间:2023-12-01 12:40:35 25 4
gpt4 key购买 nike

我有一些巨大的日志文件,其中每一行都是一个完整的 xml 文档。我需要读取每一行,解析 xml,并对每个文档执行一些操作。

目前我正在做这样的事情:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
BufferedReader rdr = new BufferedReader(new FileReader("mylogfile.xml");
String line = rdr.readLine();
int numLines = 1;
while (line != null) {
InputSource is = new InputSource(new StringReader(xml));
Document doc = builder.parse(is);
// do something with the parsed xml
line = rdr.readLine();
}

读取和处理速度约为每秒 28K 行。不错,但我认为还可以更好。我只对某些特定标签感兴趣,但确实需要知道 xml 是否包含其他嵌套标签或者它是否是无效的 xml。我尝试了正则表达式解析器,但文档可能包含一些不值得重新实现 xml 解析器的 CDATA。

使用该方法可以带来哪些性能提升?如果只增加50%,可能不值得,但2、3倍肯定是值得的。

我更喜欢使用标准 Java 库。

最佳答案

由于您只对特定标签感兴趣,我建议使用 StAX解析器。它似乎可以满足您所需的一切。

可能会比你当前的方法性能更高,因为它不会在内存中创建 DOM 树(你现在似乎正在这样做)。同时,StAX 是比 SAX 更容易的 API(拉式与推式解析)。

虽然我是 JAXB 的忠实粉丝,但我不会推荐它来完成您的任务。您只对某些且可能非常有限的标记集感兴趣,实际上并不需要将 XML 映射到 Java 结构。 JAXB 也可以与 StAX 一起使用,但它会增加一定的反射开销。您还需要筛选出您感兴趣的元素,这在组合 StAX 和 JAXB 时并不容易。 (否则您将解码整个 XML,这是开销)。

另请查看Digester但是我不太确定性能。

关于java - JAXB重复解析小xml文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25140735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com