概述
超大Excel读取和写出(支持50万+)
一、现状
假设我们的测试或生产环境的内存条件有限,比如说2GB(当然小数据的导入和导出不在本文的讨论范围,因为导入和导出它们几乎不存在内存溢出问题)。
这里,我们假如:项目中有50W条及以上数据需要进行excel导入和导出。使用普通的POI包中HSSFWorkbook
(2003版及以前的版本)和XSSFWorkbook
(2007版及以后的版本),
很容易造成内存溢出,从而无法实现
正确的导入
和导出
功能。
这个时候我们应该应该怎么办呢?
- 增加测试或生产环境的内存大小,比如说分配100GB甚至是更大的内存
- 使用POI的事件驱动模式实现消耗较低地内存大小实现导入10w、50w、甚至更多的数据
当然本文主要探讨的是第二种方案的实现及细节问题。第一个解决方案往往因为我们的客观限制并不是那么容易实现,所以我个人也比较推荐遇到这类问题,使用
第二种方法解决此类问题。
二、技术前瞻
POI提供了HSSF和XSSF的API可以自JAVA中读取修改xls/xlsx文件,但是自面对大文件时就容易报出OOM,
因此提供了接口可以以流式的方式读取/写入(xls/xlsx)。
excel类型 | 普通数据量 | 超大数据量 |
---|---|---|
xls | 读写均支持(HSSF即可) | 仅支持流式读取 |
xlsx | 读写均支持(XSSF即可) | 读写均支持(sax流式读取;SXSSF流式写出) |
鉴于目前我们项目中使用的均是office2007以后的版本,所以xls的读写在这里就不做过多演示和说明。
三、超大数据量导入和导出
- 超大Excel文件读取(支持50w+)
- 超大Excel文件写出(支持50w+)
最后
以上就是无情墨镜为你收集整理的超大Excel读取和写出(支持50万+)(一)超大Excel读取和写出(支持50万+)的全部内容,希望文章能够帮你解决超大Excel读取和写出(支持50万+)(一)超大Excel读取和写出(支持50万+)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复