gpt4 book ai didi

java - 哪种更好的方式通过 Tomcat 提供文件(用于下载)?

转载 作者:行者123 更新时间:2023-11-28 22:53:14 24 4
gpt4 key购买 nike

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

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

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

最佳答案

这是一个典型的案例,我认为没有放之四海而皆准的案例:

  • 所有字节数组的大小是多少? (平均,最小/最大)
  • 你是否从磁盘读取它们?
  • 字节数组通常在内存中保存多长时间
  • 与成功下载和完整下载相比,您观察到连接中断的频率如何?哪些文件大小?
  • 您是否衡量过当您只是流式传输您拥有的字节时会发生什么情况?
  • 是否有许多用户同时下载相同的内容?

正如您所说的那样,无论如何您都有字节数组中的文件,我不认为完全提供该字节数组会让人望而却步。但是,您需要了解字节数组的编码(假设它是文本内容,您需要在响应中发送编码 header )

如果不衡量您的情况,就几乎没有关于您应该做什么的合理建议。

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

从下载的大小和性质来看,您对 I/O 或内存的需求似乎并不高。我的建议:别担心。然而,你应该做的是:测量。检查内存消耗是否确实是一个问题。我怀疑它是。如果它没有损坏:请不要修复它。

无论如何你都有字节数组——你还不如用它把它流式传输到客户端,然后才忘记它。看起来这不会花费太长时间。

关于java - 哪种更好的方式通过 Tomcat 提供文件(用于下载)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33961492/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com