poi解决内存消耗过大溢出问题

poi解析引擎在处理大型Excel文件时可能导致内存溢出。为解决此问题,可以采用基于事件的解析方案,如使用usereventmodel下的hssf和xssf解析方式。对于xsl文件,使用Listener类,内存消耗比文件大小大10%;对于xlsx文件,利用sax的流式读取以节省内存。此外,通过限制文件大小和并发上传人数也能有效避免问题,如在Struts action中限制文件大小,并使用数量锁控制并发。优化还包括在javabean上使用注解定义数据规范,避免解析出的数据违反数据库约束。
摘要由CSDN通过智能技术生成

poi是一个excel的文件的解析引擎,我目前接触到的就两种文件格式xsl,xlsx,xsl是早先版本的excel文件格式,xlsx是后期版本的规范

poi解析引擎的解析速度是非常快的,一般2000条数据200多毫秒就解析完成了,但是这带来的是巨大的内存消耗,当文件过大,或者多人同时使用这个引擎

这个时候就容易导致内存不足而溢出,使得java虚拟机抛出OutOfMemory的异常

解决的办法可以使用poi中基于事件的解析方案,在usereventmodel这个包下,分别有hssf和xssf这两种解析的方式:

其中当使用的是解析xsl这种格式的文件的时候我们使用的是一个Listener的封装好的类来读取相应的文件,这个的话消耗内存大概比excel文件大小大10%;

当我们使用的是xlsx这种的时候,因为这种格式的文件已经使用XML格式规范了,这个时候,使用基于sax读流的方式非常的省内存,所以对这个类进行封装就可以了。

所以在对文档进行基于流方式的读取的时候,我们必须分开来考虑,分别编写他们的解析类,xls和xlsx格式

面对不同的业务逻辑,我们要对解析类进行不同种类的封装,这个过程当中由于解析逻辑的代码可能很长,这个时候我们要防止我们的方法过于冗长,一定要注意使得方法不要太大,这样也有利于栈内存的合理使用。


另外对于poi,除了内存溢出问题,还有格式转换问题,空格问题。

在解析的具体业务逻辑上,我们可以在我们的javabean上使用一个注解来描述我们的javabean的一些对excel中数据的规范性声明,这样我们在解析excel的时候,就可以对他们进行验证&#x

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值