java - 将大量 XML(文件对象)转换为包含所有文件内容的单个字符串

标签 java xml performance file-io memory-management

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

我目前正在使用 XMLEventReader 进行读取,然后使用 XMLEventWriter 进行读取,一次读取一个事件并使用 StringBuilder 连接所有字符串结果。 然后在方法末尾将其转换为 String,但这会由于 IDE 中缺少 Java 堆空间而崩溃,远远早于 500 个文件...

谢谢!

最佳答案

此字符串对象的大小最大为 50 GB (50 MByte * 500 * 2)。你知道这一点,是吗?

当您谈论输入文件并希望将序列化的 xml 数据保留在字符串中时,您不必解析文件,而只需将文件内容附加到 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);
   }
 }

关于java - 将大量 XML(文件对象)转换为包含所有文件内容的单个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3726050/

相关文章:

java - ContextCompat.getColor 方法忽略夜间模式

javascript - setInterval 不同间隔之间的性能影响

java - 在 Android 中以编程方式创建具有自定义列表项的 ListView - 无 xml 列表项布局

android - 表格包含的 XML 布局中的 ID

c# - 在 C# 中转义无效的 XML 字符

java - 在Java中使用三个状态变量

java - ArrayList or LinkedList or TreeMap 用什么?

java - 为什么我的 JTable 没有显示?

java - csvReader 在读取 csv 文件时跳过第一列每行的第一个字母

java - SAXON 向 XdmNode 添加一个子节点