于: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/