有更快的方法输出PDF文件吗?

时间:2011-04-08 06:57:14

标签: java servlets

这是一段将PDF文件输出到浏览器的代码,它可以更快吗? 这是在Java servlet中实现的。

private ByteArrayOutputStream getByteArrayOutputStreamFromFile(File file) throws Exception {
        BufferedInputStream bis = null;
        ByteArrayOutputStream bos = null;
        try {
            bis = new BufferedInputStream(new FileInputStream(file));
            bos = new ByteArrayOutputStream();
            byte[] byteContent = new byte[1024 * 1024];
            int len = 0;
            while ((len = bis.read(byteContent)) != -1) {
                bos.write(byteContent, 0, len);
            }
            return bos;
        } catch (Exception ex) {
            throw ex;
        } finally {
            if (bis != null) {
                bis.close();
            }
            if (bos != null) {
                bos.close();
            }
        }
    }

3 个答案:

答案 0 :(得分:5)

 response.setContentType("application/pdf");
 ServletContext ctx = getServletContext();
 InputStream is = ctx.getResourceAsStream("/erp.pdf");

 int read =0;
 byte[] bytes = new byte[1024];
 OutputStream os = response.getOutputStream();
 while((read = is.read(bytes)) != -1)
 {
 os.write(bytes, 0, read);
 }
 os.flush();
 os.close();

答案 1 :(得分:5)

使用Google Guava,您可以在一行中汇总:

import com.google.common.io.Files;

private OutputStream getOutputStream(File file) throws IOException {
    return Files.newOutputStreamSupplier(file).getOutput();
}

答案 2 :(得分:0)

建议:

始终关注Apache Commons FileUtils等库。它们提供简单易用的方法。

您还可以省略BufferedOutputStream,因为您已经在使用缓冲区。但这不会产生很大的影响。尝试使用nio而不是流。这可能会有所不同。

另请注意:How to download and save a file from Internet using Java?可能对您有所帮助。