我使用的是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速度。