超大Excel读取和写出(支持50万+)

一、现状

假设我们的测试或生产环境的内存条件有限,比如说2GB(当然小数据的导入和导出不在本文的讨论范围,因为导入和导出它们几乎不存在内存溢出问题)。

这里,我们假如:项目中有50W条及以上数据需要进行excel导入和导出。使用普通的POI包中HSSFWorkbook(2003版及以前的版本)和XSSFWorkbook(2007版及以后的版本),
很容易造成内存溢出,从而无法实现正确的导入导出功能。

这个时候我们应该应该怎么办呢?

  • 增加测试或生产环境的内存大小,比如说分配100GB甚至是更大的内存
  • 使用POI的事件驱动模式实现消耗较低地内存大小实现导入10w、50w、甚至更多的数据

当然本文主要探讨的是第二种方案的实现及细节问题。第一个解决方案往往因为我们的客观限制并不是那么容易实现,所以我个人也比较推荐遇到这类问题,使用
第二种方法解决此类问题。

二、技术前瞻

POI提供了HSSF和XSSF的API可以自JAVA中读取修改xls/xlsx文件,但是自面对大文件时就容易报出OOM,
因此提供了接口可以以流式的方式读取/写入(xls/xlsx)。

excel类型 普通数据量 超大数据量
xls 读写均支持(HSSF即可) 仅支持流式读取
xlsx 读写均支持(XSSF即可) 读写均支持(sax流式读取;SXSSF流式写出)

鉴于目前我们项目中使用的均是office2007以后的版本,所以xls的读写在这里就不做过多演示和说明。

三、超大数据量导入和导出

  • 超大Excel文件读取(支持50w+)
  • 超大Excel文件写出(支持50w+)

超大Excel读取和写出(支持50万+)(一)相关推荐

  1. fme:AIXM4.5和5.1读取、写出和验证

    fme:AIXM4.5和5.1读取.写出和验证 介绍 AIXM是航空信息交换模型格式.FME支持读取和写入AIXM版本4.5(XML)和AIXM版本5.1(GML).AIXM5.1读写需要FME201 ...

  2. 使用EasyExcel进行文件的读取与写出(根据目录看更清晰)

    EasyExcel简介 Java领域解析.生成Excel比较有名的框架有Apache poi.jxl等.但他们都存在一个严重的问题就是非常的耗内存.如果你的系统并发量不大的话可能还行,但是一旦并发上来 ...

  3. java生成tiff_在Java中读取和写出TIFF图像

    读取TIFF并输出BMP的最简单的方法是使用ImageIO类: BufferedImage image = ImageIO.read(inputFile); ImageIO.write(image, ...

  4. IO学习(四)文件读取与写出

    要读取一个文件,有以下几个步骤: 1.建立与文件的联系:File对象,文件必须存在 2.选择流:按字节流读取,文件输入流 InputStream FileInputStream 3.操作:byte[] ...

  5. csv文件读取与写出

    文章目录 一.pandas读取csv文件 二.pandas写出csv文件 三.利用csv模块读取csv文件 四.利用csv模块写出csv文件 一.pandas读取csv文件 1.导入pandas包 i ...

  6. 批量读取和写出excel数据#R语言#

    运用R语言处理数据时总会遇到大批量excel数据读取和写入的问题,以R中的iris数据集举例,主要有以下几种形式(直接上代码): 读入数据: 1.将多个excel数据批量读入R环境中(读入csv格式文 ...

  7. java离职证明模板_如何写出月薪过万的Java开发简历-附加模板

    年关将近,却有大批失业技术员,无论是主动离职还是被迫离职,都不约而同加入了求职大军.那么软件开发人员如何才能从众多简历中脱颖而出获得面试机会呢? 经过和众多企业HR长期的交流沟通,我总结了一下,HR们 ...

  8. 超大Excel文件读取(支持50w+)(三)

    超大Excel文件读取(支持50w+) 1 线上内存溢出问题演示 环境准备 准备一个大的excel文件(xlsx大小10M及以上) 将jvm的heap缩小到500m(JVM 参数 -Xmx500m)用 ...

  9. Node.js -- Stream 使用小例 ( 流运用 :读取、写入、写出、拷贝)

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. Stream 是一个抽象接口,Node 中有很多对象实现了这个接口.例如,对http 服务器发起请求 ...

最新文章

  1. 【怎样写代码】工厂三兄弟之抽象工厂模式(一):问题案例
  2. Python学习网络爬虫--转
  3. Spring5源码 - 03 普通对象对应的BeanDefinition是如何存入DefaultListableBeanFactory#beanDefinitionMap 源码分析
  4. 判断是否为IE浏览器(方法一)
  5. MySQL--视图view、触发器trigger、事务(start transaction)、存储过程(特殊的数据逻辑处理函数)、流程控制(if,case....)...
  6. android apk 在线分析,Android Apk安装过程解析
  7. 点击一下就射击的java代码_Java面向对象(6) —— 射击小游戏
  8. 前端 - base64原理浅析
  9. 微pe工具箱 系统安装教程_wepe启动盘制作教程|微pe工具箱怎么制作u盘启动盘
  10. 当你不能够再拥有,你唯一可以做的,就是令自己不要忘记
  11. wav转mp3,wav怎么转换成mp3?
  12. mariadb数据库基本使用
  13. 三星手机动态修改分辨率信息
  14. HTML5情人节礼物2(女友3D相册)
  15. 数据库基本操作(创建主键、外键以及索引)
  16. 使用WebGL去实现一个拖拽式UI代码生成App
  17. 单光感pid巡线_乐高4种单光感巡线逻辑
  18. win10下如何装CH340驱动
  19. 安居客二手房信息爬取
  20. 【手机拍照技巧】提高你的拍照水平!教程详细!

热门文章

  1. 《数据结构课程实践》_01_学生成绩档案管理系统_实现
  2. Codeforces Round #702 C. Sum of Cubes
  3. 图的深度优先遍历实现农夫过河
  4. php编程输出心形图案_PHP纯代码生成心形图片并自定义文字
  5. Fireworks 8 编辑图片使用技巧1
  6. 深度学习模型可解释性的研究进展_化盈盈
  7. 明星项目方生死战:战局巅峰比拼的是人心
  8. 硬件加密框架ocf cryptodev-linux介绍
  9. #ffffff为什么是白色
  10. java并法库_沈阳法库县婚姻挽回该怎么做,异地恋相处