poi使用随笔
HSSFworkbook,XSSFworkbook,SXSSFworkbook区别简述
- HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls;
- XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx;
- 前两者由于是office较为早期的版本,对于行数,列数,sheet表数都有太多限制,两者的具体区别在这里,近互联网发展迅猛,需求日益递增,对于应对大数据量的导入导出解析等,对性能和效率要求越来越高,所以需求倒逼技术升级。至此,今天的重头戏要登场了,他就是SXSSFWorkbook,刚才列举的两个,都是小数据量,内存式操作,内存中操作数据优缺点都比较直观,优点当然是读写块,缺点是小数据量尚可,使用范围和场景受限。SXSSFWorkbook,则是兼并的这两者的优点,采用临时文件+内存的方式进行读写。
按说写到这里已经差不多了,但是先别走,等我把话说完,刚才说的这么多的优点,难道没有缺点?经过一段时间使用后发现,服务器磁盘上升的异常迅速,但是感觉应该及时这块改造引起的,
通过源码分析,
- 首先是
SXSSFWorkbook workbook = new SXSSFWorkbook();
Sheet sheet = workbook.createSheet(sheetName);
问题就在创建Sheet上,我们进去看看!
原来内部也是基于XSSF够早的啊,继续刨
这个方法把XSSF转换成了SXSS,继续下钻
这里有个_writer,需要注意下,我们去这里看看
由于压缩临时文件会导致性能下降,所以_compressTmpFiles使用默认值false,继续刨
已经接近真相了,
原来如此,在这里创建了临时对象,然后进行文件方式缓存数据,怪不得,会有这么多的临时文件
既然找到源头就好办了,把临时文件删了不就好了,在这里我不得不吐槽下一些人,我不是针对谁,如果我的截图中出现了您的帖子,纯属无意冒犯
我就呵呵了,poi可是Apache的项目,你这是在小看谁呢,借这个机会正好说下我的感受,很多人喜欢主观判断,一个老段子说的挺好,
插不进去,只能是你姿势不对
好了,闲话到此为止看源码
下面说下我的解决过程,清除临时文件,但是方法受保护,应该再往上翻
方法还是受限,再往上翻,
哇塞,终点站了,请刷卡下车......