POI和jxl.jar性能比较
来源:互联网 发布:java反序列化利用 ma 编辑:程序博客网 时间:2024/06/05 08:09
JXL.jar http://www.andykhan.com/jexcelapi/download.html 下载地址
优点:
Jxl对中文支持非常好,操作简单,方法看名知意。
Jxl是纯javaAPI,在跨平台上表现的非常完美,代码可以再windows或者Linux上运行而无需重新编写
支持Excel 95-2000的所有版本
生成Excel 2000标准格式
支持字体、数字、日期操作
能够修饰单元格属性
支持图像和图表,但是这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。
缺点:效率低,图片支持部完善,对格式的支持不如POI强大
POI,http://www.apache.org/dyn/closer.cgi/jakarta/poi/ 下载poi包
1. 效率高,这点很好
2. 支持公式,宏,一些企业应用上会非常实用
3. 能够修饰单元格属性
4. 支持字体、数字、日期操作
缺点:不成熟,代码不能跨平台,貌似不少同行在使用工程中还碰到让人郁闷的BUG
--------------------------------性能测试------------------------------------------------
jxl包:好像是1.4 低于2.0 (忘记了)
poi:poi-3.5-FINAL-20090928.jar
环境:CPU:Intel(R) Core(TM)2 Duo CPU T65702.1GHZ ,2GB内存 MyEclipse1.6 JDK1.6
先前做过一些关于POI和jxl效率的比较,但是由于那时候测试工具很简单,不标准,偶尔在网上获得以为网友提供的简单测试包,还不错。所以重新测试下POI和JXL的性能
创建代码如下:
/**
* poi 创xcel
*/
public void writerPOI() {
try {
long dir= (long) Math.round(Math.floor(Math.random() * 10000000));
String dirPath = "c://11//".concat(String.valueOf(dir)) ;
File file = new File(dirPath);
if(file.exists()) {
System.out.println(file.getName()+"存oi");
if(file.delete()) {
file.mkdir();
}
}else {
file.mkdir();
}
// 创xcel 工
HSSFWorkbook newbook = new HSSFWorkbook();
int j = 0;
while(j < sheet){ //控heet创
HSSFSheet sheet = newbook.createSheet("test"+j);
HSSFRow row = null ;//行
HSSFCell cell1 = null ;//列
HSSFCell cell2 = null ;//列
for(int i = 0 ; i < leng ; i ++){
row = sheet.createRow(i) ;
cell1 = row.createCell(0);//列
cell2 = row.createCell(1);//列
if(cell1 == null){
System.out.println("cell1 null ");
}
cell1.setCellType(HSSFCell.CELL_TYPE_STRING);// 定
cell1.setCellValue("A数OI"+i);// 在
cell2.setCellType(HSSFCell.CELL_TYPE_STRING);// 定
cell2.setCellValue("B数OI"+1);// 在
}
j++ ;
}
// 新
long l = (long) Math.round(Math.floor(Math.random() * 10000000));
String name = "poi_".concat(String.valueOf(l)).concat(".xls");
FileOutputStream fp = new FileOutputStream(dirPath.concat("//").concat(name));
newbook.write(fp);// 把xcel 工
fp.flush();
fp.close();// 操
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Jxl代码:
/**
* jxl 创xcel
*/
public void writerJXL() {
try {
long dir= (long) Math.round(Math.floor(Math.random() * 10000000));
String dirPath ="c://11//".concat(String.valueOf(dir)) ;
File file = new File(dirPath);
if(file.exists()) {
System.out.println(file.getName()+"存xl");
if(file.delete()) {
file.mkdir();
}
}else {
file.mkdir();
}
// 打
long l = (long) Math.round(Math.floor(Math.random() * 1000000000));
String name = "jxl_".concat(String.valueOf(l)).concat(".xls");
WritableWorkbook book = Workbook.createWorkbook( new File(dirPath.concat("//").concat(name)));
int j = 0 ;
while(j < sheet){ //控heet创
WritableSheet sheet = book.createSheet("test"+j ,j);
Label label1 = null ;
Label label2 = null ;
for(int i = 0 ; i < leng ;i ++){
label1 = new Label(0,i,"A数xl"+i ); //第第
label2 = new Label(1,i,"A数xl"+i );
sheet.addCell(label1); // 将
sheet.addCell(label2);
}
j++ ;
}
book.write();
book.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RowsExceededException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (WriteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
测试数据和结果如下:
测试结果图:
每个sheet 6000条数据逐渐增加sheet个数
sheet个数1234poi avg(ms)30.5260.3441.0791.23jxl avg(ms)31.2222.7525.6227.89poi total(ms)152.6301.69205.38456.13jxl total(ms)156.1113.79128.09139.46poi tps24.4717.8924.5111.01jxl tps42.2145.0450.9544.78poi内存占用(kb)18016.57199449.0152980.453882.59jxl内存占用(kb)5727.597469.649235.399,236.00 6000条/sheet
测试结论:
1. poi已消耗内存换取部分效率,而jxl在内存消耗上一直很稳定。POI很容易内存溢出
2.poi随着数据量的增大,性能直线下降,当我增大到24000条每个sheet的时候,内存溢出。jxl却能运行
建议在大数据量的时候使用jxl .可以保证效率和较小内存消耗。在具体开发中,对部分常用的excel下载,可生产副本文件,避免重复生产Excel消耗内存
3.在测试的过程中,发现POI极其不稳定。获得的数据有时候相差特别大。每种测试情况我是重复测试4次,然后取平均值
- POI和jxl.jar性能比较
- POI和jxl.jar性能比较 .
- POI和jxl.jar性能比较
- POI和jxl.jar性能比较
- POI和jxl.jar性能比较
- POI和jxl.jar性能比较
- POI和jxl.jar性能比较
- POI和jxl.jar性能比较
- POI、JXL、FastExcel性能比较
- POI和jxl的比较
- poi 和jxl的性能比较,借鉴别人的,本人没有测试过,不过感觉自己可以接收这种解释
- POI与JXL的比较
- POI与JXL的比较
- poi和jxl的区别
- jxl和POI的区别
- jxl 和POI的区别
- POI和jxl写入效率
- jxl和POI的区别
- 《C++精英内参之程序员高效指南》-12-1影响效率的不良习惯之打断
- Ubuntu14.04下maven3.3.9的安装与测试
- XML序列化与反序列化
- opencv中yuv420的存储方式
- 30分钟掌握ES6/ES2015核心内容(下)
- POI和jxl.jar性能比较
- 操作 redis-jedis--spring-哨兵 2
- kudu scan java api
- 使用MFC的CHtmlView创建浏览器控件
- android网络编程——http post
- Jsp小案例——九九乘法表
- 第十一周上机实践项目 项目1-点-圆-圆柱类的设计(1)
- HorizontalListView源码解读之自己动手写ListView
- html中用框架做导航页