Преобразование большого количества XML (файловых объектов) в одну строку со всем содержимым файлов - PullRequest
0 голосов
/ 16 сентября 2010

Какой самый эффективный (с точки зрения производительности) и понятный способ выполнить преобразование - взять до 500 файлов XML размером до 50 МБ каждый и создать из них одну строку. Все файлы в формате XML и должны сохранять форматирование и т. Д.

В настоящее время я выполняю чтение, используя XMLEventReader, а затем XMLEventWriter, читая по одному событию за раз и используя StringBuilder для объединения всех результатов String. Затем он превращается в строку в конце метода, но происходит сбой из-за недостатка места в куче Java в IDE, до 500 файлов ...

Спасибо!

Ответы [ 2 ]

1 голос
/ 16 сентября 2010

Этот объект String будет иметь размер до 50 ГБ (50 МБ * 500 * 2).Вы знаете об этом, не так ли?

Когда вы говорите о вводе файлов и хотите сохранить сериализованные данные XML в строку, вам не нужно анализировать файлы, номожет просто добавить содержимое файла в ваш StringBuilder.

Предполагается, что все файлы находятся в одной папке и с небольшой помощью commons-io, это должно сделать это (... не на моей машине с 4 ГБRam, кстати):

 File[] files = parentFolder.list();
 StringBuilder veryVeryBigBuilder = new StringBuilder();
 for (File file: files) {
   if (isXmlFile(file)) {
      veryVeryBigBuilder.append(FileUtils.readFileToString(), encoding);
   }
 }
0 голосов
/ 16 сентября 2010

Вам действительно нужно беспокоиться о том, что они XML?Разве вы не можете читать каждый файл по очереди, используя BufferedReader, и просто выводить все строки в PrintWriter?

...