jakarta-ee - 如何使用 ServletOutputStream 更快地写入文件内容

标签 jakarta-ee servlets

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

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

服务器示例代码 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();

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

提前致谢

最佳答案

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

关于jakarta-ee - 如何使用 ServletOutputStream 更快地写入文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11982415/

相关文章:

java - 为什么持久化实体两次可以避免带有连接列的实体级联错误

jakarta-ee - EJB 上的 JavaEE 类注释处理

javascript - 在 JavaScript 中访问 Java/Servlet/JSP/JSTL/EL 变量

java - 如何使用 servlet 为域添加别名?

java - 我们可以通过多少种方式跟踪 servlet 中的 session ?

Java Web 应用程序 - 如何使用多模式架构实现 Saas?

java - 存储在请求范围内 - 从 SOAPHandler 到 @Producer

java - 了解 EJB 3.x 中创建的目录结构/模块

java - Servlet 没有重定向到带有参数的 URL

javascript - 如何从 jSTL foreach 到 jQuery 访问变量值