Добавить строку в большой XLSX с небольшим объемом памяти с помощью Apache POI

Я добавлял строки в существующие книги XLSX, используя java и Apache POI.
Проблема в том, что мне постоянно не хватает памяти по мере роста рассматриваемых книг, и ключ -Xmx помогает только до определенного момента.

Фактическое чтение больших книг не является проблемой, так как я могу использовать для этого API событий SAX, а запись больших объемов новых данных не является проблемой, так как это обрабатывается SXSSF, но то, что я Мне нужен какой-то эффект памяти для добавления строк в уже большие книги.

Было рекомендовано использовать конструктор SXSSFWorkbook(XSSFWorkbook), но, насколько я понимаю, это по-прежнему означает загрузку всей (и без того огромной) книги в память.
Также рекомендуется загружать книгу как файл, а не использовать входной поток для сохранения памяти, однако тогда я предполагаю, что мне придется записывать все в совершенно новый файл.

Итак, есть ли здесь кто-нибудь, кто знает, как с помощью Apache POI добавлять строки в уже существующие (и огромные) книги без нехватки памяти?


person Lbm    schedule 15.12.2016    source источник
comment
Я не вижу лучшего способа, чем использовать потоковый API для чтения данных и записи их с помощью SXSSF в новый файл, но тогда вы будете каждый раз копировать все данные, что, вероятно, повлияет на время выполнения вся операция...   -  person centic    schedule 15.12.2016
comment
С помощью Office Open XML (*.xlsx) мы смогли выбрать из ZIP-архива только те XML-документы, которые действительно нужны. Конечно, это звучит проще, так как это будет. См.: stackoverflow.com/questions/35805878/   -  person Axel Richter    schedule 15.12.2016
comment
Ну, во-первых, спасибо за комментарии. Что касается самой проблемы, я сам не нашел хорошего решения, но смог разбить рассматриваемые файлы на более мелкие, чтобы обойти проблемы с памятью.   -  person Lbm    schedule 27.12.2016