哪个是通过Tomcat提供文件(下载)的更好方法?

时间:2015-11-27 16:29:52

标签: java tomcat download

如果一个文件对我来说是一个字节数组,哪种方法可以让用户下载文件更好?

答:使用Apache IOUtils将字节数组直接写入响应流。在这种情况下,如果客户端停止下载和/或断开连接会发生什么?我想将JVM的内存利用率保持在最低限度。

B:将字节数组写入某个临时位置的文件中。然后获取FileInputSteam并将其写入响应。在这种情况下,我需要编写代码来管理磁盘上保存的文件,并确保定期清理。清理算法需要确保它不会尝试删除当前正在向客户端提供的文件。

1 个答案:

答案 0 :(得分:1)

这是一个典型的案例,我认为没有一个尺寸适合所有人:

  • 所有字节数组的大小是多少? (平均,最小/最大)
  • 你是否从磁盘上读过它们?
  • 字节数组通常在内存中存活多久
  • 与成功和完整下载相比,您多久观察一次连接中断?文件大小在哪个?
  • 您是否衡量了当您只是流式传输您拥有的字节时会发生什么?
  • 许多用户是否同时下载相同的内容?

正如你所说,无论如何你都有字节数组中的文件,我不希望它完全服务于那个字节数组是禁止的。但是,您需要了解字节数组的编码(假设它是文本内容,您需要发送带响应的编码标头)

如果不衡量你的情况,几乎没有任何合理的建议你应该做什么。

编辑,回复您的评论:每当处理请求时 - 例如当文件完全传输或抛出“破管”异常时,我会假设您的内存将被释放,除非您明确地将其保存在webapp会话或任何其他可以存活更长时间的数据结构中。但你可能不会明确地这样做,对吧?

您的下载的大小和性质似乎对I / O或内存的要求不高。我的建议:别担心。但是,你应该做的是:测量。检查内存消耗是否确实存在问题。我怀疑它是。如果没有破坏:不要修理它。

你还有字节数组 - 你也可以用它来将它流式传输到客户端,然后才忘记它。看起来这看起来不会太长。