将文本从文件复制到HttpServletResponse的最快方法

时间:2009-09-04 01:07:58

标签: java file servlets stream

我需要一种非常快速的方法将文件从文件复制到HttpServletResponse的主体。

实际上我是在循环中逐字节复制,从bufferedReader到response.getWriter(),但我相信必须有更快,更直接的方法。

谢谢!

3 个答案:

答案 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);

http://commons.apache.org/io/api-1.4/org/apache/commons/io/IOUtils.html#copy(java.io.Reader, java.io.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();