下载大的文件的时候,会内存溢出。我debug了一下。发现会把整个文件写到response的outputstream中,然后发送内容的时候会拷贝outputstream中的内容。如果几百M的文件,都这么读到内存中,一会儿就内存溢出了,不知道是什么原因,是不是JSF的下载不应该这么实现?求解答。
实现代码如下: String excelName = "";
excelName = "log.txt";
File file = new File(excelName);
try {
ServletOutputStream servletOutputStream = response
.getOutputStream();
response.setHeader("Content-disposition", "attachment; filename="
+ logFile);
// response.setContentLength((int) file.length());
// response.setContentType("application/octet-stream");
response.setContentType("application/x-download");

byte[] b = new byte[1024];
int i = 0;
FileInputStream fis = new java.io.FileInputStream(file);

while ((i = fis.read(b)) > 0) {
servletOutputStream.write(b, 0, i);
servletOutputStream.flush();
}
servletOutputStream.close();
fis.close();
FacesContext.getCurrentInstance().responseComplete();