MyExcel 3.7.3 版本发布,漏洞修复&简化
MyExcel,是一个集导入、导出、加密Excel等多项功能的Java工具包。
MyExcel采用声明式语法来构建、读取Excel,屏蔽POI的具体操作细节(对POI无感知),以开发常用的技术替代,使得构建(从简单到高度复杂Excel)以及读取Excel变得极为便利,且构建、读取性能极为优异,占用内存极低(具体,请移步参考MyExcel&阿里EasyExcel性能对比)。
如导入:
List<ArtCrowd> result = SaxExcelReader.of(ArtCrowd.class) .sheet(0) // 0代表第一个sheet,如果为0,可省略该操作,也可sheet("名称")读取 .rowFilter(row -> row.getRowNum() > 0) // 如无需过滤,可省略该操作,0代表第一行 .beanFilter(ArtCrowd::isDance) // bean过滤 .read(path.toFile());
本次主要为漏洞修复更新,强烈建议已用用户进行升级,具体更新如下:
- 修复读取excel空行问题;
- 修复读取数值精度问题,如原数值3.98,读取后可能会是3.9799999999999999998;
- 修复在windows环境下,使用零拷贝未释放相关资源导致的错误;
- DefaultStreamExcelBuilder支持在close方法中主动删除临时文件,避免用户手动删除;
- 部分代码优化;
一、空行问题
在部分场景下,用户提交的Excel文件存在大量无内容的空行,但可被解析,这样的空行往往难以发现,如果读取为List处理,可能出现OOM问题,影响系统稳定性,修复后,默认会过滤该行的读取。
二、零拷贝资源释放
MyExcel为读取海量数据的Excel能占用极低内存,使用了内存+文件的方式进行数据存放,其中文件使用零拷贝方式读取,去除内核空间与用户空间的文件拷贝过程,提升效率以及降低内存占用。
在windows系统下,以往版本因未释放相关资源,导致无法正常删除用于保存数据的临时文件,会出现异常(不影响实际使用),如下:
java.nio.file.FileSystemException: E:\BigData\ztest\myexcel\s_c_62_1585896412480_24953102150115799386.data: 另一个程序正在使用此文件,进程无法访问。 at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86) at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97) at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102) at sun.nio.fs.WindowsFileSystemProvider.implDelete(WindowsFileSystemProvider.java:269) at sun.nio.fs.AbstractFileSystemProvider.deleteIfExists(AbstractFileSystemProvider.java:108) at java.nio.file.Files.deleteIfExists(Files.java:1165) at com.github.liaochong.myexcel.utils.TempFileOperator.deleteTempFile(TempFileOperator.java:112) at com.github.liaochong.myexcel.utils.TempFileOperator.deleteTempFiles(TempFileOperator.java:98) at com.github.liaochong.myexcel.core.cache.StringsCache.clearAll(StringsCache.java:142) at com.github.liaochong.myexcel.core.SaxExcelReader.process(SaxExcelReader.java:269) at com.githu
三、主动删除临时文件
在使用DefaultStreamExcelBuilder构建ZIP文件时,对应的临时文件需要用户主动删除,如下:
Path zipFile = null; try (DefaultStreamExcelBuilder<CommonPeople> excelBuilder = DefaultStreamExcelBuilder.of(CommonPeople.class) .capacity(1000) // 设定zip文件中每个excel的容量/行 .start()) { data(excelBuilder, 5000); zipFile = excelBuilder.buildAsZip("xxxx"); // do something ...... } finally { Files.delete(zipFile); }
在实际使用过程中,主动删除过程往往会被不小心忽略,由此可能导致系统临时文件堆积的越来越多,从而引发系统问题(如磁盘不够等),本次在对应的close方法加入了临时文件的清理,无需finally清理:
Path zipFile = null; try (DefaultStreamExcelBuilder<CommonPeople> excelBuilder = DefaultStreamExcelBuilder.of(CommonPeople.class) .capacity(1000) // 设定zip文件中每个excel的容量/行 .start()) { data(excelBuilder, 5000); zipFile = excelBuilder.buildAsZip("xxxx"); // do something ...... }
但需要注意的是,在某些场景下,生成的临时文件并非立即使用,这种场景下,仍需用户手动删除临时文件。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Apache Libcloud 3.0.0 发布,统一云计算接口
Apache Libcloud 3.0.0 发布了,Libcloud 是一个访问云计算服务的统一接口。 新版本包括许多更改和改进,最大的变化是放弃了对 Python 2.7 和 Python 3 以上、3.5 以下版本的支持。 主要更新亮点包括: 基本存储 API 的类型注释 Azure Blobs 驱动程序中的各种改进 “ {list,iterate} _container_objects” 方法中的新标准 “prefix” 关键字参数 4 个新的计算驱动程序(KubeVirt、LXD、Camera 和 GiG G8) 对deploy_node()功能的各种改进 以及更多 详情可查看更新说明。
- 下一篇
Apache Groovy 2.5.11 发布,JVM 动态脚本语言
Apache Groovy 2.5.11 已发布,此版本是 Groovy 2_5_X 分支的最新维护版本,官方建议所有使用此分支上的用户升级到最新版本。 下载地址https://groovy.apache.org/download.html 此版本修复了 6 个错误: [GROOVY-9438] - 对 switch 中某些特定情况下的 case 语句处理不正确 [GROOVY-9450] - DefaultGroovyMethods findIndexOf 方法无法使用 startIndex [GROOVY-9469] - 全局 AST 转换过程中的原始异常信息不再保留在错误信息中 [GROOVY-9483] - 当点击"Save changes"对话框中的 Cancel 按钮时,控制台会退出 [GROOVY-9485] - 元类(metaclass)未进行初始化 [GROOVY-9489] - 在 JDK9+ 平台上进行构建时,生成 javadoc 文档的过程中忽略了 package.html 文件 详见发布说明。
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- Mario游戏-低调大师作品
- CentOS关闭SELinux安全模块
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Red5直播服务器,属于Java语言的直播服务器
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池