@aidkz

Java. Каким способом объединить xml больших обьемов?

XML файлы 100мб-1гб, DOM-ом ошибка переполнения памяти (отключать -XX:-UseGCOverheadLimit, выдать больше памяти JMV, не вариант). Через StaX с нуля (читаем каждый xml и на лету создаем новый) не вариант. JAXB маршалинг-демаршалинг (слишком большой обьем, много классов скорее всего тоже по памяти полетит)? Какие еще есть способы, в какую сторону копать? (по возможности без фреймворков).
Заранее спасибо.
  • Вопрос задан
  • 483 просмотра
Пригласить эксперта
Ответы на вопрос 2
@odissey_nemo
Программист, ГИС-системы, растры, космоснимки
Если имеется в вижу, что есть множество мелких файлов XML общим объёмом 100Мб-1Гб, то применял следующие методы:
1. StringBuilder с заголовком, далее в него дописываю выдранные с помощью RegEx содержимые каждого из XML. В конце записываю в StringBuilder в шапку что требуется (например, число обработанных файлов), добавляю хвост интегрального XML - и вуаля.
2.Если не требуется шапку менять в конце работы, то открываю новый ZIP файл и пишу в его поток, который идёт сразу на диск (или в память, как требуется по ситуации). Получается ещё компактнее, раз так в 20-30 по памяти.
3. Можно и просто в буферизованный файловый поток писать, опять-же (см. пункт 2).

Выдирал всегда RegEx'ом только потому, что условия были простыми: найти начальный и замыкающий теги нужного куска XML. Если желательно форматирование, то можно слегка подшаманить при добавлении очередного найденного куска с дополнительными пробелами, табуляциями и \n(\r).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы