我有一个Servlet,可将文件下载到请求的客户端。现在,当用户请求下载xml文件时。它将开始下载,完成后,文件看起来不完整。文件末尾缺少一些数据。

我的代码如下:

File file = new File(location);
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition","attachment;filename=" + fileName);

FileInputStream fileIn = new FileInputStream(file);
OutputStream out = response.getOutputStream();

byte[] outputByte = new byte[4096];
int length = -1;

//copy binary contect to output stream
while((length = fileIn.read(outputByte)) > 0)
{
    out.write(outputByte);
}

fileIn.close();
out.flush();
out.close();


我的代码在哪里无法下载完整的xml文件?

最佳答案

像这样更改while循环。缓冲区大小为4096。您应仅使用在先前的read()中读取的长度。

  //copy binary contect to output stream
  while((length = fileIn.read(outputByte)) > 0)
  {
     fileOut.write(outputByte, 0, length);
  }


但是,您应该为此使用Guava ByteStreams。您可以找到其他支持此功能的库。

09-12 15:41