我正在尝试编写一个非常大的 XLSX 文件(超过 400 万个单元格),但我遇到了一些内存问题。
我不能使用 SXSSF,因为我还需要读取模板中的现有单元格。
我能做些什么来减少内存占用吗?
也许结合流式阅读和流式写作?
最佳答案
要用低内存处理大数据,最好的,我认为唯一的选择是 SXSSF api-s。 如果您需要读取现有单元格的一些数据,我假设您不会同时需要整个 4M+。 在这种情况下,根据您的应用程序要求,您可以自己处理窗口大小,并仅在特定时间将您需要的数据量保存在内存中。 您可以先查看以下示例: http://poi.apache.org/spreadsheet/how-to.html#sxssf
作为
SXSSFWorkbook wb = new SXSSFWorkbook(-1); // turn off auto-flushing and accumulate all rows in memory
// manually control how rows are flushed to disk
if(rownum % NOR == 0) {
((SXSSFSheet)sh).flushRows(NOR); // retain NOR last rows and flush all others
希望这对您有所帮助。
关于java - 使用 Apache POI 进行低内存写入/读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19192651/