java操作Excel效率之poi与fastexcel比较(转载)

本文通过实际测试比较了Apache POI与FastExcel在处理大量Excel数据时的性能表现。结果显示FastExcel在读取速度及内存使用方面优于POI。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

于:http://blog.163.com/aaron_chan_520/blog/static/27852686201042485458338/


自己做了个小测试 
POI代码如下

       public void testPoiExcel(String strPath) throws Exception {

  HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(strPath));

  HSSFSheet sheet = wb.getSheetAt(0);

  HSSFRow row;
  HSSFCell cell;

  for (int i = sheet.getFirstRowNum(); i < sheet.getLastRowNum(); i++) {
   row = sheet.getRow(i);
   for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) {
    cell = row.getCell((short) j);
   }
  }
 }

fastExcel代码如下

 public void testFastExcel(String strPath) throws Exception {
  
  Workbook workBook = FastExcel.createReadableWorkbook(new File(strPath));
  workBook.open();

  Sheet s = workBook.getSheet(0);
  
  String[] row;
  String cell;
  
  for (int i = s.getFirstRow(); i <= s.getLastRow(); i++) {
   row = s.getRow(i);
   for (int j = s.getFirstColumn(); j <= s.getLastColumn(); j++) {
    cell = s.getCell(i, j);
   }
  }
  
  workBook.close();
 }

Excel一行数据如下 【AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA,AAAAAAAA 

测试结果如下 
POI         2272条     5782毫秒 
FastExcel   2272条     828毫秒 
在我的机器上设置的jvm内存 poi只能跑2272条数据,再多就内存溢出了。 
FastExcel做到48000条还没溢出时间是14093毫秒

为什么这么大区别 我自己感觉是 POI用的是大对象HSSFRow,HSSFCell而Fastexcel是String[]和String 
毕竟在集合中数组是占用空间最小的

但是这样的话 fastexcel不能操作Excel的样式了 ,如果是做简单的Excel导入导出首选FastExcel


本篇文章来自<A href='http://www.soidc.net'>IDC专家网</a> 原文链接:http://www.soidc.net/discuss/1/090115/00/627795_1.html


另:关于java读写excel不同方案效率的讨论http://bbs.youkuaiyun.com/topics/390107430/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值