如何使用ServletOutputStream更快地编写文件内容

时间:2012-08-16 07:20:09

标签: java-ee servlets

我们在服务器端尝试了以下方法,

从MS-Amazon服务器写入大约55秒的2.5 MB文件内容到Java客户端代码,Android客户端代码和IOS客户端代码

服务器示例代码1

servletOutputStream = response.getOutputStream();
servletOutputStream.write(fileData);
servletOutputStream.flush();
servletOutputStream.close();

服务器示例代码2

BufferedOutputStream bufferedOutputStream = new                  BufferedOutputStream(servletOutputStream);
bufferedOutputStream.write(fileData);
bufferedOutputStream.flush();
bufferedOutputStream.close();`

客户端读者代码

inputStream = httpConnection.getInputStream();
....
int nRead;
byte[] data = new byte[1024];
while ((nRead = inputStream.read(data, 0, data.length)) != -1) {
  buffer.write(data, 0, nRead);
}
buffer.flush();
buffer.close();

请分享您的想法以提高下载速度

提前致谢

1 个答案:

答案 0 :(得分:2)

添加BufferedOutputStream不会有任何区别。默认情况下,servlet输出流实际上是ByteArrayOutputStream,因为servlet容器在写入任何头之前必须查看整个响应,因此它可以编写Content-Length头。这会增加延迟,但不会增加5秒。您可以使用固定长度或分块响应编码来解决它添加的任何延迟。有关详细信息,请参阅Servlet API。但是我认为你有一个更大的问题需要首先解决,可能是网络或DNS或时钟偏差问题。