前言:这几天遇到一个需求,需要从数据库读取记录然后导出成excel表格,
在这个过程遇到很多问题,从最开始使用HSSFWorkbook到XSSFWorkbook,最后使用
SXSSFWorkbook。
先来了解下为什么用SXSSFWorkbook,在源码中发现属性名_randomAccessWindowSize,
指定内存中缓存的最大行数,他就是SXSSFWorkbook能导出大量数据关键因素, 具体怎
么实现的呢,一步步查看到SXSSFSheet源码,在创建行的方法中(加粗部分),当达到设
置的最大行数时就flushRows 操作,把当前内存中行数写到磁盘中去
public Row createRow(int rownum) {
int maxrow = SpreadsheetVersion.EXCEL2007.getLastRowIndex();
if (rownum >= 0 && rownum <= maxrow) {
Row previousRow = rownum > 0 ? this.getRow(rownum - 1) : null;
int initialAllocationSize = 0;
if (previousRow != null) {
initialAllocationSize = previousRow.getLastCellNum();
}
if (initialAllocationSize <= 0 &a