MyExcel 3.7.3 版本发布,漏洞修复&简化

栏目: 软件资讯 · 发布时间: 4年前

内容简介:MyExcel,是一个集导入、导出、加密Excel等多项功能的Java工具包。 MyExcel采用声明式语法来构建、读取Excel,屏蔽POI的具体操作细节(对POI无感知),以开发常用的技术替代,使得构建(从简单到高度复杂Excel)以...

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());

本次主要为漏洞修复更新,强烈建议已用用户进行升级,具体更新如下:

  1. 修复读取excel空行问题;
  2. 修复读取数值精度问题,如原数值3.98,读取后可能会是3.9799999999999999998;
  3. 修复在windows环境下,使用零拷贝未释放相关资源导致的错误;
  4. DefaultStreamExcelBuilder支持在close方法中主动删除临时文件,避免用户手动删除;
  5. 部分代码优化;

一、空行问题

在部分场景下,用户提交的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
    ......
}

但需要注意的是,在某些场景下,生成的临时文件并非立即使用,这种场景下,仍需用户手动删除临时文件。

更多,请移步文档:https://github.com/liaochong/myexcel/wiki

MyExcel 3.7.3 版本发布,漏洞修复&简化


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

About Face 3

About Face 3

Alan Cooper、Robert Reimann、David Cronin / John Wiley & Sons / 2007-5-15 / GBP 28.99

* The return of the authoritative bestseller includes all new content relevant to the popularization of how About Face maintains its relevance to new Web technologies such as AJAX and mobile platforms......一起来看看 《About Face 3》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

html转js在线工具
html转js在线工具

html转js在线工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换