Java如何提高poi的user模式解析excel大小上限

1.poi的user模式就像高达一样,api全乎,资料丰富
2.但是user模式的对内存消耗时极其不友好的,搞不好就会导致内存益处
3.解析百万级别的excel有很多种方式,例如poi的sax模式,easyExcel解析,资料也挺多
4.但是重要的一点,easyExcel时基于sax的封装,故如果有一些奇特对Excel操作的需要其实还是得使用sax来解析大数据量的excel,对数据来进行特殊处理,话说回来,easyExcel其实已经比较完善了,可以满足大部分人的需求
5.要是有钱的话,上aspose也挺安逸
6.回到正题,poi解析时到底时因为什么消耗内存呢
7.经过一系列的数据测试,抱歉不能贴上测试的结果,得出了一些可以参考的结论
8.Excel中包含图片,附件,文字信息,通过造不同比例的数据来测试哪一种比较消耗内存
9.结论可能存在误差,只是一个大概数据
10.1mb的图片解析时消耗内存大约是6.7mb,1mb附件解析时大约是3.5mb内存,1mb文字信息(50w单元格)大约是500mb内存
11.其实Excel中的图片和附件信息poi时通过字节流来读取的,所以操作时并不会有太多的内存消耗
12.但是单元格就不一样了,是每一个单元格都会在内存中有相应的数据,单元格数量多了,那内存自然就上来了
13.还有一个影响解析内存消耗的点就是,Excel缓存,这是一种不正常的情况,曾遇到一个Excel只有2mb大小,但是里面的缓存文件有300mb大,导致解析时直接内存爆炸,这Excel肯定时祖传的
14.为什么Excel中有大量数据但是Excel本身没有多大,原因是因为Excel本身有一个共享字符串技术,大体逻辑是相同字符串只存储一份,多处引用的话则数据指向该字符串位置,这就可以实现非常牛逼的内存表现
15.重点来了
16.既然对内存消耗多的是单元格,那么我们只要控制单元格的数量就可以
17.使用上一篇文章的文件校验前提下,确保没有垃圾的缓存文件,新加一个特殊的数据校验,先用sax解析打开文件,获取所有sheet的所有数据行数,列数来进行单元格数量计算,具体要校验的数据级需要根据服务器的配置来决定,以及调试,超过上限则提示解析失败,保证系统稳定,然后再次使用user模式解析,使用高达的api
18.Excel中包含很多图片的时候,文字不多的前提下,服务器内存够大,其实user解析100mb的Excel也不是不可能的,亲测已实现

Java如何提高poi的user模式解析excel大小上限相关推荐

  1. POI事件模式读取Excel 2003文件

    一.概述 1. Excel 2003文件(即后缀为xls)是二进制文件,存储结构为复合文档,POI读取xls文件有两种方式 用户模式(usermodel):一次性将xls文件读入到内存,创建dom结构 ...

  2. java中输出拼json,java poi 解析excel 输出json 并且拼接字符串显示到jsp

    ##js代码 $(function() { $("#file_form").submit( function() { //首先验证文件格式 var fileName = $('#f ...

  3. Java面试poi中excel版本大小_java 中 poi解析Excel文件版本问题解决办法

    java 中 poi解析Excel文件版本问题解决办法 发布时间:2020-10-02 03:46:15 来源:脚本之家 阅读:91 作者:程诺 poi解析Excel文件版本问题解决办法 poi解析E ...

  4. java poi解析excel_Java 利用POI 解析Excel

    引入的依赖 org.apache.poi poi 3.16 org.apache.poi poi-ooxml 3.16 简单说明 主要有四个属性,Workbook(工作表),Sheet(表单),Row ...

  5. java excel row遍历空_用Java巧妙的解析Excel中的POI

    原标题:用Java巧妙的解析Excel中的POI 相信各位小伙伴们,在做Java开发的时候,有时候会需要你用Java语言去解析Excel中的POI,这个时候肯定很多小伙伴们会懵逼,那么究竟是怎么实现的 ...

  6. Java基础系列19:使用JXL或者POI生成和解析Excel文件

    一 简介 如题所示,当我们需要在Java中解析Excel文件时,可以考虑使用JXL或POI的API来解析. 二者的区别如下: jxl现在基本上没被维护了,最近一次更新时间还是几年前.相反,poi属于A ...

  7. java使用poi解析Excel文件

    本文取自http://www.cnblogs.com/hongten/p/java_poi_excel_xls_xlsx.html java中读取Excel文件并解析 Excel2007及以前的文件使 ...

  8. Java读取和解析Excel数据:基于Apache POI(二)

    Java读取和解析Excel数据:基于Apache POI(二) 假设附录1文章中的test.xls是对员工的考勤记录表.需要根据这张excel表统计员工的加班时间,那么需要重点关注第五列的下班时候的 ...

  9. java解析excel报错,poi解析excel文件报错

    getFileMagic() only operates on streams which support mark(int) 使用 bis 解决 BufferedInputStream bis = ...

  10. java 读取excel2007 内存不足_原创 |我是如何解决POI解析Excel出现的OOM问题的?

    背景 之前接手过一个解析Excel的项目,使用的是Java里的POI组件解析的,但是在解析时候经常出现OOM,后来我从下面几个方面优化了下,解决了99%的问题,对,你没看错,只解决了99%. 解决方案 ...

最新文章

  1. Paper2:Fast 3D Line Segment Detection From Unorganized Point Cloud
  2. 华北电力大学保定校区计算机专业,华北电力大学保定校区本科计算机科学与技术_华北电力大学保定校区本科计算机科学与技术简介-查字典学校网...
  3. Sqlite数据库中索引的使用、索引的优缺点
  4. Android 导航栏如何轻松搞定
  5. rcmd: socket: Permission denied
  6. 怎么计算网站高峰期并发量和所需的带宽?
  7. extjs ajax 遮罩层,[Ext JS 4] 实战之Load Mask(加载遮罩)的显示与隐藏
  8. 联想计算机CDROM启动,联想电脑光驱启动问题?
  9. 如何杀死一个已经detached的screen会话?
  10. 科学计算机病毒代码大全,有哪些计算机病毒代码
  11. mysql(多级分销)无限极数据库设计方法
  12. JS特效一:图片轮播图(JS必须掌握的特效)
  13. Python图形用户界面和游戏开发
  14. mysql存储过程 根据查询的结果集向表中插入数据
  15. 舒城中学2021年高考成绩查询,舒城教育信息网——舒城县教育局关于对2019年荣获高考目标奖的学校和个人表彰的通报...
  16. 对辛辛那提原始数据集(ims)数据划分正常,内圈故障,滚动体故障,外圈故障(python代码),可作为自己故障诊断模型实验的另一个数据集(因为CWRU普遍而言,准确度和被使用频率已经极高)
  17. 推特情感分析-基于spark
  18. OpenGL实现图片边缘暗角效果(1)
  19. C++ —— 类的使用
  20. matlab的fir1截止频率的设置

热门文章

  1. SLC、MLC、TLC和QLC这几种存储颗粒的区别
  2. 关于KEILC51和KEILMDK的合并
  3. 51单片机KEILC51的安装
  4. 树莓派python 简介_树莓派与python语言概述
  5. word论文排版和写作02:插入算法的伪代码
  6. python股票量化交易学习目录
  7. (1) 创建一个Customer ,名字叫 Jane Smith, 他有一个账号为1000,余额为2000元,年利率为 1.23% 的账户。 (2) 对Jane Smith操作。 存入 100 元,再
  8. Java类的声明详解
  9. 私厨菜谱app的设计与实现(二)
  10. linux skype 4.3,在Arch Linux上安装Skype 4.3(最新版本)