java - 使用 Apache POI 进行低内存写入/读取

标签 java apache-poi out-of-memory

我正在尝试编写一个非常大的 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/

相关文章:

java - 在 Ubuntu10.04 Linux 中启动 Jade

java - WAS 6.1 显示 Java 版本 5,但实际上是 1.4

java - 为什么要在 Java 中使用异常处理?

java - 使用 Apache POI 在 XSSFCell 中设置填充颜色不起作用

Java Apache POI : Writing Workbook to ServletOutputStream hangs until button clicked in client browser

error-handling - Prolog程序超出全局堆栈错误

java - 从哪个 Linux 内核/libc 版本开始,Java Runtime.exec() 就内存而言是安全的?

maven - java.lang.OutOfMemoryError : PermGen space error

java - 从 Java 方法返回多个值 : why no n-tuple objects?

java - Apache POI hsmf - 找不到 MAPIMessage