Tomcat 8文件下载速度问题

时间:2015-06-30 06:14:52

标签: java performance file tomcat download

我正在使用Tomcat 8,我有从上下文docbase文件夹中的tomcat服务器位置下载大文件的功能。 下面是我正在使用该文件下载的代码片段:

PrintWriter out = response.getWriter();   
response.setContentType("APPLICATION/OCTET-STREAM");   
response.setHeader("Content-Disposition",
                   "attachment; filename=filename);  
FileInputStream fileInputStream = new FileInputStream("filepath");  
int i;   
while ((i=fileInputStream.read()) != -1) {  
    out.write(i);   
}   
fileInputStream.close();   
out.close();

当我下载文件时,它以65KB /秒的速度下载 来自保存服务器。如果我将相同的文件放在Apache服务器中并尝试下载,则下载速度为135KB /秒。

有人可以帮助我加快Tomcat的文件下载速度吗?

1 个答案:

答案 0 :(得分:0)

问题是一次读取和写入一个字节到非缓冲流是非常低效的。查看this previous answer并根据您的代码进行调整,我们可以使用:

// Assume ServletResponse response
ServletOutputStream servletOutputStream = response.getOutputStream();
response.setContentType("APPLICATION/OCTET-STREAM");   
response.setHeader("Content-Disposition",
                   "attachment; filename=filename);  
FileInputStream fileInputStream = new FileInputStream("filepath");  

// Choose a bigger value if you want
byte[] buffer = new byte[4096];
int n;
while ((n = fileInputStream.read(buffer) != -1)
{
    servletOutputStream.write(buffer, 0, n);
}
fileInputStream.close();
servletOutputStream.close();

上述内容应该非常高效,并且希望等于或超过您报告的Apache速度。