Tomcat 8文件下载速度问题



我使用的是Tomcat8,我可以从上下文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下载文件的速度吗?

问题是,一次读取一个字节并将其写入未缓冲的流是非常低效的。查看之前的答案并将其调整为您的代码,我们可以使用:

// 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速度。

最新更新