将大量XML(文件对象)转换为包含所有文件内容的单个String

时间:2010-09-16 11:10:00

标签: java xml performance file-io memory-management

执行转换最多500个XML文件的最有效(性能方面)和干净的方法是什么,每个文件大小高达50 Mb,并从中生成一个字符串。所有文件都是XML,需要保留格式等。

我目前正在使用XMLEventReader进行读取,然后使用XMLEventWriter,一次读取一个事件并使用StringBuilder连接所有String结果。 然后在方法结束时将其变为String,但是由于IDE中缺少Java堆空间而导致崩溃,因为在500个文件之前......

谢谢!

2 个答案:

答案 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