gpt4 book ai didi

java - 使用 StAX 编写巨大的 XML 文件

转载 作者:行者123 更新时间:2023-12-04 04:53:14 25 4
gpt4 key购买 nike

我有一些数据(大约 150-200 MB)需要转换成 XML 文件。我之前尝试过基于 DOM 来做,但是内存是一个很大的限制。

我开始查看 StaX 实现并有一些疑问。

可以说我有以下代码。

  XMLStreamWriter writer = factory.createXMLStreamWriter(new FileWriter("output.xml"));
writer.writeStartDocument(" ");
writer.writeStartElement(" ");
writer.writeStartElement("");
// call method X a million times
writer.writeEndElement(" ");
writer.flush();
writer.close();

// method x
X() {
writer.writeStartElement(" ");
writer.writeEndElement();
}
  • 我假设每当执行方法 X 时,它都会将元素写入文件。直到现在,这不会将转换后的 XML 保存在内存中。我对吗?
  • 这会像前 2 个开始元素一样自动关闭未关闭的标签吗?
  • 我可以刷新编写器并再次使用相同的编写器将更多的 xml 附加到文件中,如下所示:
    X() 
    {
    writer.writeStartElement(" ");
    writer.writeEndElement();
    writer.flush();
    }
  • 最佳答案

    I am assuming that whenever method X is executed , it writes the element into the file. This wont hold the converted XML until now in memory. Am I right?



    StAX 解析器可能会在将 XML 的子集写入文件之前将其缓冲在内存中,以减少为提高性能而完成的磁盘 I/O 量。它不会缓存太多以至于您的内存不足。

    Will this close the unclosed tags automatically like the first 2 start elements?


    writeEndDocument方法将自动关闭任何未关闭的标签。
  • http://docs.oracle.com/javase/6/docs/api/javax/xml/stream/XMLStreamWriter.html#writeEndDocument()

  • Can I flush the writer and use the same writer again to append some more xml into the file like this:



    您可以继续使用相同的 XMLStreamWriter在调用 writeEndDocument 之前将内容写入 XML 文件.您无需显式调用 flush在你写更多内容之前。一旦你完成了 XMLStreamWriter您应该调用 close在它上面释放它。

    关于java - 使用 StAX 编写巨大的 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17108617/

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