我需要一种非常快速的方法将文件从文件复制到HttpServletResponse的主体。
实际上我是在循环中逐字节复制,从bufferedReader到response.getWriter(),但我相信必须有更快,更直接的方法。
谢谢!
答案 0 :(得分:5)
我喜欢使用接受字节数组的read()方法,因为你可以调整大小并改变性能。
public static void copy(InputStream is, OutputStream os) throws IOException {
byte buffer[] = new byte[8192];
int bytesRead;
BufferedInputStream bis = new BufferedInputStream(is);
while ((bytesRead = bis.read(buffer)) != -1) {
os.write(buffer, 0, bytesRead);
}
is.close();
os.flush();
os.close();
}
答案 1 :(得分:4)
没有必要自己做这些事情。这是一个常见的要求,存在开源,经过实战考验的优化解决方案。
Apache Commons IO有一个带有一系列静态复制方法的IOUtils类。也许你可以使用
IOUtils.copy(reader, writer);
答案 2 :(得分:2)
这就是我在带有4K缓冲区的Servlet中的表现,
// Send the file.
OutputStream out = response.getOutputStream();
BufferedInputStream is = new BufferedInputStream(new FileInputStream(file));
byte[] buf = new byte[4 * 1024]; // 4K buffer
int bytesRead;
while ((bytesRead = is.read(buf)) != -1) {
out.write(buf, 0, bytesRead);
}
is.close();
out.flush();
out.close();