执行转换最多500个XML文件的最有效(性能方面)和干净的方法是什么,每个文件大小高达50 Mb,并从中生成一个字符串。所有文件都是XML,需要保留格式等。
我目前正在使用XMLEventReader进行读取,然后使用XMLEventWriter,一次读取一个事件并使用StringBuilder连接所有String结果。 然后在方法结束时将其变为String,但是由于IDE中缺少Java堆空间而导致崩溃,因为在500个文件之前......
谢谢!
答案 0 :(得分:1)
此String对象的大小最大为50 GByte(50 MByte * 500 * 2)。你知道吗,是吗?
当您谈到输入文件并希望将序列化的xml数据保存在String中时,您不必解析文件,只需将文件内容附加到StringBuilder即可。
假设所有文件都在一个文件夹中并且在commons-io的帮助下,这应该这样做(...不能在我的机器上使用4 GB Ram,顺便说一句):
File[] files = parentFolder.list();
StringBuilder veryVeryBigBuilder = new StringBuilder();
for (File file: files) {
if (isXmlFile(file)) {
veryVeryBigBuilder.append(FileUtils.readFileToString(), encoding);
}
}
答案 1 :(得分:0)
你真的需要打扰他们是XML吗?您是不是可以使用BufferedReader
逐行逐行阅读每个文件,只是将所有行输出到PrintWriter
?