【发布时间】:2020-10-30 01:19:45
【问题描述】:
您好,我正在使用 apache POI,我正在使用 SXSSFWorkbook 写入工作簿,因为数据量很大,
一切看起来都不错,但在将工作簿转换为输入流时,导出报告需要花费大量时间。
这是我的代码
public StreamedContent generateStreamRep(String fileName, Workbook wb) {
try (ByteArrayOutputStream dsf = new ByteArrayOutputStream();){
wb.write(dsf);
file = new DefaultStreamedContent(ByteSource.wrap(dsf.toByteArray()).openStream(), "xlsx", fileName);
}
我使用 IOUtils 现在切换到 com.google.common.io.ByteSource
查看了 PipedStreams 但没有获得适当的资源。
【问题讨论】:
-
这类问题没有完整的例子是无法回答的。见stackoverflow.com/questions/61221133/…。在那里我提供了一个这样的,也告诉了我的结果。
-
Java 管道 I/O(需要额外的线程)将是理想的。但是添加足够大的初始容量也会有所帮助:
new ByteArrayOutputStream(10_000_000)。openBufferedStream可能不会改善情况。 -
如果您有足够的内存,请使用内存流,然后将内存流的内容转储到文件中。我在处理 DB4 文件的库中遇到了这种问题。它避免了连续敲击操作系统执行 IO 操作。
标签: java excel stream apache-poi iostream