Java 使用StAX编写大型XML文件
我有一些数据(大约150-200 MB)需要转换成XML文件。我以前尝试过基于DOM来实现它,但是内存是一个很大的限制 我开始研究StaX实现,并提出了一些疑问 假设我有以下代码Java 使用StAX编写大型XML文件,java,xml,stax,Java,Xml,Stax,我有一些数据(大约150-200 MB)需要转换成XML文件。我以前尝试过基于DOM来实现它,但是内存是一个很大的限制 我开始研究StaX实现,并提出了一些疑问 假设我有以下代码 XMLStreamWriter writer = factory.createXMLStreamWriter(new FileWriter("output.xml")); writer.writeStartDocument(" "); writer.writeStartElement(" "); wr
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()
{
writer.writeStartElement(" ");
writer.writeEndElement();
writer.flush();
}
writeEndDocument
方法将自动关闭所有未关闭的标记
X()
{
writer.writeStartElement(" ");
writer.writeEndElement();
writer.flush();
}
您可以继续使用相同的
XMLStreamWriter
将内容写入XML文件,直到调用writeEndDocument
。在编写更多内容之前,无需显式调用flush
。使用完XMLStreamWriter
后,应该调用close
来释放它。您的XML结构是否非常复杂(有很多不同类型的节点和深层次的层次结构)?是的。数据是动态的,我们需要基于dataOk创建XML。我以为这只是一个数据解析。所以,也许你会考虑用轻量级的StringBuffer来做这件事。我对1或2没有答案,但我觉得你会有问题。您考虑过JAXB吗?JAXB听起来正是OP试图避免的,因为它要求您在内存中保存所有数据。请使用factory.createXMLStreamWriter(新文件输出流(“output.xml”),“UTF-8”)
。FileWriter使用默认(OS)编码。最好在文件output.xml.gz上使用压缩的GzipOutputStream。谢谢。这很有帮助。:)