HSSF、XSSF和SXSSF区别以及Excel导出优化
之前有写过运用POI的HSSF方式导出数据到Excel(见:springMVC中使用POI方式导出excel至客户端、服务器实例),但这种方式当数据量大到一定程度时容易出现内存溢出等问题。
首先,POI提供了HSSF、XSSF以及SXSSF三种方式操作Excel。他们的区别如下:
HSSF:是操作Excel97-2003版本,扩展名为.xls。
XSSF:是操作Excel2007版本开始,扩展名为.xlsx。
SXSSF:是在XSSF基础上,POI3.8版本开始提供的一种支持低内存占用的操作方式,扩展名为.xlsx。
其次,大家需要了解下Excel不同版本的一些区别,这些限制其实间接的局限了POI提供的API功能。
1、支持的行数、列数
Excel97-2003版本,一个sheet最大行数65536,最大列数256。
Excel2007版本开始,一个sheet最大行数1048576,最大列数16384。
2、文件大小
.xlsx文件比.xls的压缩率高,也就是相同数据量下,.xlsx的文件会小很多。
3、兼容性
Excel97-2003版本是不能打开.xlsx文件的。
Excel2007开始的版本是可以打开.xls文件的。
根据以上内容,大家可以根据自己的需求进行选择,当然海量数据的导出肯定是推荐SXSSF的方式。编码过程中,其实不同方式的使用方式基本相同,所以互相切换也是比较简单的,只要把带有前缀的接口改成对应的就行了。如:
HSSF对应:HSSFWorkbook、HSSFSheet、HSSFRow、HSSFCell……
XSSF对应:XSSFWorkbook、XSSFSheet、XSSFRow、XSSFCell……
SXSSF对应:SXSSFWorkbook、Sheet、Row、Cell……
规律还是挺明显的吧,除了workbook,SXSSF的接口都不带前缀,另外两种方式的各个接口都带有对应的前缀。
另外,前面有提到SXSSF是一种低内存占用的操作方式,因为其提供了一个新的方法:
SXSSFWorkbook w3= new SXSSFWorkbook(100);//内存中保留100条数据,其余写入硬盘临时文件
在数据量超过设置的值时,会在硬盘生成临时文件保存之前的数据,而且POI会根据规则自动删除生成的这些临时文件。
其实到这里已经结束了,但在好奇心的驱使下,个人想看看POI生成的临时文件。所以查了一下,大家说是在系统的缓存文件夹下会产生类似的临时文件,如:
poi-sxssf-sheet6849116696956134782.xml
根据操作系统的不同,通常目录如下:
Windows7: C:\Users\xxxx\AppData\Local\Temp (xxxx为windows用户名)
Linux: /var/tmp/
但并没有找到,后来在tomcat的临时文件夹下找到了,如:D:\Tomcat_7.0.42\temp。
于是又科普了一下,发现是tomcat的原因,因为在tomcat上运行的应用会通过java.io.tmpdir系统变量获取到临时文件的目录。
大家可以通过下面的语句查看自己应用的临时文件目录:
System.out.println(System.getProperty("java.io.tmpdir"));
虽然POI会根据规则自动删除临时文件,但是知道了文件路径,大家也可以根据实际情况,看是否删除这些临时文件。
HSSF、XSSF和SXSSF区别以及Excel导出优化的更多相关文章
- 百万级别数据Excel导出优化
前提 这篇文章不是标题党,下文会通过一个仿真例子分析如何优化百万级别数据Excel导出. 笔者负责维护的一个数据查询和数据导出服务是一个相对远古的单点应用,在上一次云迁移之后扩展为双节点部署,但是发现 ...
- HSSF,XSSF和SXSSF的区别
HSSF是POI工程对Excel 97(-2007)文件操作的纯Java实现 XSSF是POI工程对Excel 2007 OOXML (.xlsx)文件操作的纯Java实现 从POI 3.8版本开始, ...
- 关于Excel导出实例(适合新手,比较详细)
需要源代码的可以加我微信好友gqljxg1514 1,首先配置依赖pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0&q ...
- java excel导出(基于注解)
小白,做日志只是为了方便自己查看,能帮到别人当然更好,不喜勿喷. 上代码 依赖: <dependency> <groupId>org.apache.poi</groupI ...
- 使用NPOI实现简单的Excel导出功能
[1]NPOI是啥? NPOI是指构建在POI 3.x版本之上的一个程序,NPOI可以在没有安装Office的情况下对Word或Excel文档进行读写操作. POI是一个开源的Java读写Excel. ...
- 记一次针对excel导出的优化
最近发现我们系统导出excel文件时由于是导出百万级数据导出,速度过慢并且内存占用多,故进行了下面的一次优化. 我们使用apache的poi进行excel文件操作 主要耗时: 1.从数据库得到需要导出 ...
- 转:POI操作Excel导出
package com.rd.lh.util.excel; import java.beans.PropertyDescriptor; import java.io.FileOutputStream; ...
- 用SpringMvc实现Excel导出功能
以前只知道用poi导出Excel,最近用了SpringMvc的Excel导出功能,结合jxl和poi实现,的确比只用Poi好,两种实现方式如下: 一.结合jxl实现: 1.引入jxl的所需jar包: ...
- 基于jdk1.7实现的excel导出工具类
通用excel导出工具类,基于泛型.反射.hashmap 以及基于泛型.反射.bean两种方式 import java.io.*;import java.lang.reflect.Field;impo ...
随机推荐
- python并开发编程之协程
一 引出协成 并发的本质是:切换+保存状态 CPU在运行行一个任务时,会在两种情况下切走去执行其他任务,一是该任务发生了阻塞,二是运行该任务的时间过长 yeild可以保存状态,yeild状态保存与操作 ...
- JavaScript(jquery)实现二级菜单联动
为什么写这篇随笔? 二级菜单的联动一直是我心中一块石头,犹记得大一的时候只会用一点的Dreamweaver,当时做二级菜单难受啊,啥都不会,网上找了些资料,也看不懂别人的代码更别说用起来了 前些日子. ...
- Check whether a remote server port is open on Linux
链接:https://www.pixelstech.net/article/1514049471-Check-whether-a-remote-server-port-is-open-on-Linux
- Windows程序设计笔记(二) 关于编写简单窗口程序中的几点疑惑
在编写窗口程序时主要是5个步骤,创建窗口类.注册窗口类.创建窗口.显示窗口.消息环的编写.对于这5个步骤为何要这样写,当初我不是太理解,学习到现在有些问题我基本上已经找到了答案,同时对于Windows ...
- vue的组件小操作
项目技术: webpack + vue + element + axois (vue-resource) + less-loader+ ... vue的操作的方法案例: 1.数组数据还未获取到,做出预 ...
- webp怎么打开 webp怎么转换成jpg
webp怎么打开 webp怎么转换成jpg 2 3 4 5 6 7 分步阅读 在使用google服务的时候(比如 google play),我们会发现保存的图都是webp格式. 那webp是什么东 ...
- FileSaver.js 介绍
这是著名开源项目 FileSaver.js 的 README.md,我把它翻译成中文.发出来,方便自己和他人阅读. 项目地址:https://github.com/eligrey/FileSaver. ...
- 强化学习 - Q-learning Sarsa 和 DQN 的理解
本文用于基本入门理解. 强化学习的基本理论 : R, S, A 这些就不说了. 先设想两个场景: 一. 1个 5x5 的 格子图, 里面有一个目标点, 2个死亡点二. 一个迷宫, 一个出发点, ...
- ajax中url赋json格式的值时发生中文乱码的相关问题
具体流程:转入到jsp界面时会加载ajax,ajax转到url时传带hide在jsp界面的值titleString,其来源见下面的代码. String title=new String("\ ...
- HDU 1003 Max Sum【动态规划求最大子序列和详解 】
Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...