我正在使用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的文件下载速度吗?
答案 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速度。