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

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

内容简介: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 版本发布,漏洞修复&简化


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

查看所有标签

猜你喜欢:

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

创京东

创京东

李志刚 / 中信出版社 / 2015-5-1 / CNY 49.80

1998年,刘强东创业,在中关村经销光磁产品。2004年,因为非典,京东偶然之下转向线上销售。2014年,京东市值已超400亿美元,跻身全球前十大互联网公司之列。 这是一个听起来很传奇的创业故事,但只有当事人了解创业维艰。 刚转向电商时,传统企业前景光明,而电商看起来前途未卜,京东如何能毅然转型并坚持到底?资金匮乏的时候,京东靠什么说服投资人?在强大的对手面前,京东靠什么反超并一路领先......一起来看看 《创京东》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

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

UNIX 时间戳转换

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具