【发布时间】:2013-07-04 07:13:42
【问题描述】:
所以我不太确定内心深处到底发生了什么。
假设我们在一个 Web 应用程序中,用户请求下载一个动态生成的文件,该文件的大小可能为几 mb,甚至可能为 100 mb 或更大。应用程序会这样做
String disposition = "attachment; fileName="myFile.txt";
response.setHeader("Content-Disposition", disposition);
ServletOutputStream output = response.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(output);
service.exportFile(ids, writer, properties);
整个文件永远不会完全在内存中,我说得对吗?例如。生成的任何数据都会发送给用户,然后在服务器上丢弃(假设一切顺利,没有丢包)?
我问这个是因为我需要更改生成文件的库(第 3 方),而新的库不使用标准 Java IO 东西可能是因为它只是一个 API,而实际的库是 C 语言。无论如何获取文档说要调用的缓冲区数据
String data = buffer.toString();
(文件是ASCII)
那么我的假设是否正确,即内存消耗会受到影响,尤其是当多个用户同时下载大文件时?
【问题讨论】:
-
是的,这是个坏主意,所以如果可以的话,我会避免使用它。在获得数据时更好地流式传输数据。 (或者有那么多你不在乎的记忆)
标签: java web-applications download outputstream