в соответствии с документацией SXSSF (потоковой передачи API) :
SXSSF (пакет:
org.apache.poi.xssf.streaming
) - это совместимое API потоковое расширение XSSF, которое необходимо использовать, когда должны быть произведены очень большие электронные таблицы, и пространство кучи ограничено. SXSSF достигает своей низкой след памяти, ограничивая доступ к рядам, которые находятся в скольжении, а XSSF дает доступ ко всем строкам в документе. Старые строки, которые больше не в окне не становятся недоступными, так как они записываются на диск.
Тем не менее, в приведенном примере Flush происходит до того, как рабочая тетрадь дана местоположение файла, в которое для записи файла.
public static void main(String[] args) throws Throwable {
Workbook wb = new SXSSFWorkbook(100); // keep 100 rows in memory, exceeding rows will be flushed to disk
Sheet sh = wb.createSheet();
for(int rownum = 0; rownum < 1000; rownum++){
Row row = sh.createRow(rownum);
for(int cellnum = 0; cellnum < 10; cellnum++){
Cell cell = row.createCell(cellnum);
String address = new CellReference(cell).formatAsString();
cell.setCellValue(address);
}
}
// Rows with rownum < 900 are flushed and not accessible
for(int rownum = 0; rownum < 900; rownum++){
Assert.assertNull(sh.getRow(rownum));
}
// ther last 100 rows are still in memory
for(int rownum = 900; rownum < 1000; rownum++){
Assert.assertNotNull(sh.getRow(rownum));
}
FileOutputStream out = new FileOutputStream("/temp/sxssf.xlsx");
wb.write(out);
out.close();
}
Так что это просит вопросы: