SXSSF: чтобы откуда он промывает строки не в окне до вывода в файл?

в соответствии с документацией 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();
}

Так что это просит вопросы:

  • Где в файловой системе он хранит данные?
  • Это просто создает файл Temp в каталоге Temp по умолчанию?
  • Это безопасно для всех / большинство реализаций?

9
задан Paolo Forgia 19 July 2018 в 07:09
поделиться