poi使用随笔

HSSFworkbook,XSSFworkbook,SXSSFworkbook区别简述

  1. HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls;
  2. XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx;
  3. 前两者由于是office较为早期的版本,对于行数,列数,sheet表数都有太多限制,两者的具体区别在这里近互联网发展迅猛,需求日益递增,对于应对大数据量的导入导出解析等,对性能和效率要求越来越高,所以需求倒逼技术升级。至此,今天的重头戏要登场了,他就是SXSSFWorkbook,刚才列举的两个,都是小数据量,内存式操作,内存中操作数据优缺点都比较直观,优点当然是读写块,缺点是小数据量尚可,使用范围和场景受限。SXSSFWorkbook则是兼并的这两者的优点,采用临时文件+内存的方式进行读写。

按说写到这里已经差不多了,但是先别走,等我把话说完,刚才说的这么多的优点,难道没有缺点?经过一段时间使用后发现,服务器磁盘上升的异常迅速,但是感觉应该及时这块改造引起的,

通过源码分析,

  1. 首先是
SXSSFWorkbook workbook = new SXSSFWorkbook();

Sheet sheet = workbook.createSheet(sheetName);

 问题就在创建Sheet上,我们进去看看!

原来内部也是基于XSSF够早的啊,继续刨

这个方法把XSSF转换成了SXSS,继续下钻

这里有个_writer,需要注意下,我们去这里看看

由于压缩临时文件会导致性能下降,所以_compressTmpFiles使用默认值false,继续刨

已经接近真相了,

 原来如此,在这里创建了临时对象,然后进行文件方式缓存数据,怪不得,会有这么多的临时文件

 既然找到源头就好办了,把临时文件删了不就好了,在这里我不得不吐槽下一些人,我不是针对谁,如果我的截图中出现了您的帖子,纯属无意冒犯

 我就呵呵了,poi可是Apache的项目,你这是在小看谁呢,借这个机会正好说下我的感受,很多人喜欢主观判断,一个老段子说的挺好,

插不进去,只能是你姿势不对

 好了,闲话到此为止看源码

 下面说下我的解决过程,清除临时文件,但是方法受保护,应该再往上翻

 

方法还是受限,再往上翻,

哇塞,终点站了,请刷卡下车......

原文地址:https://www.cnblogs.com/songyz/p/9476333.html