网站还没有做解析是什么意思,建设网站企业网上银行,三五互联做的网站怎么样,汽车网络营销方式➡️博客首页 https://blog.csdn.net/Java_Yangxiaoyuan 欢迎优秀的你#x1f44d;点赞、#x1f5c2;️收藏、加❤️关注哦。 本文章CSDN首发#xff0c;欢迎转载#xff0c;要注明出处哦#xff01; 先感谢优秀的你能认真的看完本文… ➡️博客首页 https://blog.csdn.net/Java_Yangxiaoyuan 欢迎优秀的你点赞、️收藏、加❤️关注哦。 本文章CSDN首发欢迎转载要注明出处哦 先感谢优秀的你能认真的看完本文有问题欢迎评论区交流都会认真回复 POI如何做大文件的写入 一、文件和POI之间的区别是什么二、POI对于当今的社会发展有何重要性三、POI大文件的写入3.1️使用XSSF写入文件3.2️使用SXSSFWorkbook写入文件3.3️对比结果 四、拓展知识4.1️为什么SXSSFWorkbook占用内存更小 上一篇博文️: 什么是POI为什么它会导致内存溢出 上一篇博文中介绍了POI的内存溢出以及几种Workbook那么我们在做文件写入的时候
该如何选择呢他们在内存的使用上有什么差异呢一、文件和POI之间的区别是什么 1. 文件是一种数据存储的形式可以包含各种信息如文本、图像、音频、视频等。而POI是一种Java API用于处理各种类型的文件包括Excel、Word、PowerPoint等。 2. 文件可以通过多种方式创建和编辑如手动编写、使用特定的编辑工具等。而POI提供了一组API可以通过编程方式读取、创建和修改文件内容。 3. 文件可以保存在本地计算机或云存储中可以通过文件系统路径或URL进行访问。而POI可以处理文件的内容和格式包括读取和写入文件以及对文件进行格式化等操作。 4. 文件可以通过不同的应用程序打开和处理如使用Microsoft Office、OpenOffice等。而POI可以在Java环境中使用无需安装其他应用程序。 总的来说文件是数据的表现形式而POI是一种处理文件的工具可以帮助开发人员对各种类型的文件进行读写和修改操作。 二、POI对于当今的社会发展有何重要性 POI (Points of Interest) 对于当今的社会或科技发展具有重要性。POI 是指那些在地理位置上有特殊意义或吸引力的地点如公司、餐馆、景点等。以下是POI在社会和科技发展中的重要性 1. 旅游和出行指南POI提供了旅行者必需的信息如旅游景点、酒店、餐馆等。这对于旅游业具有重要意义使得游客能够更好地计划和享受旅行。 2. 本地搜索和导航POI可以在地图和导航应用中进行本地搜索帮助用户寻找周围的商店、服务和设施。对于定位服务、导航软件和城市规划具有重要作用。 3. 商业分析和市场营销POI数据可以帮助企业进行市场分析了解商业活动和竞争环境。例如通过分析POI数据企业可以预测市场趋势、优化商业策略或选择合适的营销渠道。 4. 交通和城市规划POI数据可以帮助交通规划者了解城市的交通流量和交通瓶颈以便进行交通规划和改善。此外POI数据还可以用于城市规划帮助决策者制定城市发展策略和公共设施布局。 5. 社交媒体和位置服务POI数据被用于社交媒体应用中用户可以在其发布的照片或信息中标记地点。这为用户提供了更多的社交互动并为社交媒体平台提供了更精确的地理数据。 总之POI对于当今的社会和科技发展至关重要。它为旅游业、市场营销、城市规划和交通管理提供了有价值的数据和信息同时也为用户提供了更好的导航、搜索和社交体验。 了解这些之后我们接下来分别使用XSSFWorkbook和SXSSFWorkbook来写入一个Excel文件分别看一下堆内存的使用情况。
三、POI大文件的写入 3.1️使用XSSF写入文件 package com.ifbranch.excel.write;import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss .usermodel.Row;
import org.apache.poi.ss .usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileOutputStream;
import java.io.IOException;
import java.util.UUID;
/**
* author xinbaobaba
*/
public class XSSFExcelTest {public static void main(String[] args) throws InterruptedException {// 创建一个新的工作簿XSSFWorkbook workbook new XSSFWorkbook();// 创建一个新的表格Sheet sheet workbook.createSheet(Example Sheet);for (int i 0; i 10000; i) {// 创建行从0开始计数Row row sheet.createRow(i);for (int j ; j 100; j) {//在行中创建单元格从0开始计数Cell cell row.createCell(j);//设置单元格的值cell.setCellValue(UUID.randomUUID().toString());}}// 设置文件路径和名称String filename example.xlsx;try (File0utputStream outputStream new FileOutputStream(filename)) {//将工作簿写入文件workbook.write(outputStream);}catch (IOException e) {e.printstackTrace();} finally {try {// 关闭工作簿资源workbook.close();}catch (IOException e) {e.printstackTrace();}}}
} 运行main方法的过程中通过arthas看一下堆内存的使用情况 curl -0 https://arthas .aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar→ java -jar arthas-boot.jar
[INFO] JAVA HOME: /Library/Java/JavaVirtualMachines/jdk1.8.0 311.jdk/Contents/Home/jre
[INFO] arthas-boot version: 3.7.1
[INFO] Found existing java process, please choose one and input the serial number of the
process, eg : 1. Then hit ENTER.
*[1]: 41417 org.jetbrains.idea.maven.server.RemoteMavenServer36[2]: 4874[3]: 43484 org.jetbrains.jps.cmdline.Launcher[4]: 43485 excel.write.XSSFExcelTest
4[INFO]arthas home: /Users/hollis/.arthas/lib/3.7.1/arthas[INFO] Try to attach process 43485Picked up JAVA TOOL OPTIONS:[INFO] Attach process 43485 success.[INFO] arthas-client connect 127.9.0.1 3658执行memory命令(这个执行的时间点很重要我是在 String filename “example.xlsx”;前输出了一行日志然后sleep 50s我在控制台看到这行日志之后开始查看堆内存情况) [arthas43485]$ memory得到结果 即占用堆内存1200M。 3.2️使用SXSSFWorkbook写入文件 package excel.write;import org.apache.poi.ss .usermodel.Cell;
import org.apache.poi.ss .usermodel.Row;
import org.apache.poi.ss .usermodel.Sheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;import java.io.FileOutputStream;
import java.io.IOException;
import java.util.UUID;public class SXSSFExcelTest {public static void main(String[] args) {// 创建一个新的工作簿SXSSFWorkbook workbook new SXSSFWorkbook();// 创建一个新的表格Sheet sheet workbook.createSheet(Example Sheet);for(int i0;i1000;i){// 创建行从0开始计数)Row row sheet.createRow(i);for(int j 0; j 100; j){//在行中创建单元格从0开始计数Cell cell row.createCell(j);// 设置单元格的值cell.setCel1Value(UuID.randomUuID().tostring());}}// 设置文件路径和名称String filename example.xlsx;try (FileOutputStream outputStream new FileOutputStream(filename)) {//将工作演写入文件workbook.write(outputstream);}catch (IOException e) {e.printStackTrace();} finally {try {//关闭工作簿资源workbook.close();} catch (IOException e) {e.printstackTrace();}}}
}同样通过Arthas查看内存占用情况 占用内存148M左右 3.3️对比结果 同样的一份文件写入XSSFWorkbook需要1200MSXSSFWorkbook只需要148M。所以大文件的写入使用SXSSFWorkbook是可以更加节省内存的。 如果不方便使用arthas也可以直接在JVM启动参数中增加Xmx150m的参数运行以上两段代码使用XSSFWorkbook的会地出OOM: 而使用SXSSFWorkbook时则不会。 So在使用POI时如果要做大文件的写入建议使用SXSSFWorkbook会更加节省内存。 四、拓展知识 4.1️为什么SXSSFWorkbook占用内存更小 接下一篇博文️: 为什么POI的SXSSFWorkbook占用内存更小