gpt4 book ai didi

java - 如果我以更大的 block (即大于 1024 字节)上传大文件,会发生什么情况?

转载 作者:行者123 更新时间:2023-12-02 05:23:01 25 4
gpt4 key购买 nike

所以我有一个大文件~20MB,必须上传到网络服务器,我遵循以下方法:

  • 从存储输入流读取文件
  • 创建大小为 1024字节缓冲区
  • 创建一个输出流并向其写入字节缓冲区
  • 重复步骤 2 和 3,直到文件完全读写

现在,我有几个问题,

  1. 要上传这样的大文件,我必须重复步骤 2 和 3 20 * 1024 次。如果我想减少迭代次数,即通过将字节缓冲区大小增加到4096,从而减少迭代次数20 * 256,该怎么办?除了 Android 上的内存不足之外,这还会产生什么后果?

  2. 如果我根据运行时在 Android 上创建的缓存大小修改此大小,网络服务器是否需要进行任何更改(它可能因设备而异)?

  3. 如果由于网络或服务器问题而导致上传中断,我还需要恢复上传,因此我考虑保留成功发送的最后一个 block 号,从而在以下情况下发送下一个 block :互联网可用或服务器响应。这是正确的做法吗?是否有任何可用的东西,或者我正在尝试在这里重新发明轮子?

  4. 发送到服务器的这些 block 或字节数组是否有接收顺序?

最佳答案

您的问题的答案:

  1. 使用 1024 的缓冲区大小相当小。 TCP 层将尝试将完整的数据包推送到网络上。除非涉及巨型帧,否则完整数据包通常为 1.5K 字节。因此,如果您向网络套接字写入 1K,则在写入下一个 1K 之前,TCP 数据包不一定会被推出。这是为了最大限度地减少发送每个数据字节的开销。

  2. 大多数企业级 Web 服务器可以轻松处理大小为 10 兆字节(如果不是更大的话)的 POST 请求。我在工作中经常遇到这种情况。

  3. 这已经完成了 - 抱歉,我没有任何指示。

  4. HTTP 采用像 TCP 这样的面向流的协议(protocol),因此字节的接收顺序与接收顺序相同。 TCP 中没有“ block ”的概念 - 您发送字节流,接收方获取(按顺序)字节流。

关于java - 如果我以更大的 block (即大于 1024 字节)上传大文件,会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26334521/

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