同事文章:
部分项目的文件下载处理方式如下:
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(filePath));
byte[] stb = new byte[bis.available()];
int length = 0;
length = bis.read(stb);
bis.close();
response.setContentLength(length);
BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream(), length);
bos.write(stb, 0, length);
bos.close();
这种方式下载几十KB的小文件没有什么大碍,但下载大文件(甚至到几十MB)则存在重大的性能隐患。
对于下载大文件的场景,代码标红部分,会创建一个巨大的字节数组,并且将整个文件读入内存中。可想而知,当处于文件下载高峰期,将会对系统运行的稳定性造成严重影响!
解决方法:
FileInputStream is = new FileInputStream(new File(filePath));
response.setContentLength(is.available());
FileCopyUtils.copy(is, response.getOutputStream());
将开篇的整段代码,替换为这三行代码,问题解决。
第二行的作用是为了在下载提示框显示文件大小(如图),不写也可以。
最简化可以只写一句(提示框不显示文件大小):FileCopyUtils.copy(new FileInputStream(new File(filePath)), response.getOutputStream());
FileCopyUtils 全名 org.springframework.util.FileCopyUtils
使用了分块的方式进行流复制,并在完成后关闭流,实现类似我们一般的上传处理。每次复制4k,大概如下实现。
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(filePath));
BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
int bytesRead;
byte[] buffer = new byte[4096];
while ((bytesRead = bis.read(buffer, 0, 4096)) != -1) {
bos.write(buffer, 0, bytesRead);
}
bos.close();
bis.close();
相关推荐
内存溢出配置,内存溢出配置内存溢出配置内存溢出配置
本资源是从之前的资源综合整理出来的代码,之前的代码不全,需要下载两次,为了...本资源解决的难题是导入大文件excel的时候,会报内存溢出的错误。 欢迎各位下载,解决用户的难题是我的宗旨,好的话给个评价,谢谢!
JAVA内存溢出问题总结
绝对原创,这是我在项目中解决大数据Excel导入时内存溢出问题而编写的Excel行级解析器。同时支持Excel-2003和Excel-2007,excel-2003解析采用poi的eventusermodel模式实现,2007采用xmlreader实现,经项目验证,...
易语言防止文件内存溢出源码,防止文件内存溢出,读入子程序
完美解决java读取excel内存溢出问题,希望可以帮到大家
java解决大批量数据导出Excel产生内存溢出的方案
该文档整合了网上所有的关于描述was(webSphere)下生成许多phd文件的...产生该类文件的原因包括JVM设置的最小内存太小,以至于内存溢出,还有就是程序漏洞,使得JVM内存溢出,文档中叶介绍了websphere的检测工具的使用
kettle内存溢出(Java heap space)以及解决方法
内存溢出处理办法,生成内存溢出分析文件,可清楚因为什么原因导致内存溢出。
根据这个设计方案,做了详细的实现,经项目验证,Excel文件20W条数据不成问题,因为Excel解析是我自己原创的行级处理器,不会一次性生成很多对象,因此不存在内存溢出现象,只要excel文件放得下,有多少记录都没问题...
jxl写大文件时会出现内存溢出原因 jxl写大文件时会出现内存溢出原因
JAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.doc
易语言防止文件内存溢出源码。@易语言源码分享站。
我们经常会使用phpExcel导入或导入xls文件,但是如果一次导出数据比较大就会出现内存溢出错误,下面我来总结解决办法
易语言源码易语言防止文件内存溢出源码.rar 易语言源码易语言防止文件内存溢出源码.rar 易语言源码易语言防止文件内存溢出源码.rar 易语言源码易语言防止文件内存溢出源码.rar 易语言源码易语言防止文件内存溢出...
该文档详细描述了,内存溢出各种问题和解决方案,适合学习!
eclipse运行大点的项目时候经常出现内存溢出,这个文档教大家如何解决这个问题,亲测有效
poi读取大量数据会造成gc内存溢出的报错,由于垃圾回收机制无法将大量的对象及时的回收,而这些对象又会保存在内存中,会导致内存不够用的情况,这时候我们就需要使用新的方法,读取为cvs即可.此解决方案可支持千万数据的...