【问题标题】:Java I/O read DelayJava I/O 读取延迟
【发布时间】:2011-09-20 23:54:51
【问题描述】:

当我尝试读取 InputStream 时,读取需要服务器花费大量时间。该进程读取一些字节暂停 5 分钟,再次读取,并以这种方式继续。但是线程在读取一些字节后挂起。有什么方法可以快速读取字节吗?

【问题讨论】:

  • 你从哪里读取字节?一个插座?一个文件?
  • 我正在从一个 URL 请求文件(到我们的一个服务器),它发送流...可以在读取开始之前计算流的大小吗?

标签: java io iostream inputstream


【解决方案1】:

如果您正在从任何设备读取字节,您应该期望 read() 会阻塞一段时间。多长时间取决于设备。如果是 Socket,则取决于发送数据的另一端和您的网络特性。

如果您希望连接检测到失败的 Socket 连接,请让另一端定期发送心跳,除非在有限的时间内收到数据包,否则您可以假设连接已死。

【讨论】:

    【解决方案2】:

    进程读取一些字节暂停 5分钟

    这是什么意思。你暂停它,还是它自己暂停?

    如果您将其暂停 5 分钟,请不要打扰。 read() 将阻塞,直到数据可用。这可能少于 5 分钟,因此您可能会浪费很多时间。

    如果它自己暂停,那是因为 read() 将阻塞直到数据可用(见上文)。所以这意味着服务器发送的速度没有你期望的那么快。所以调查那个,而不是接收者的行为。

    【讨论】:

    • 它为自己暂停..时间不是恒定的。我有一个计时器,有时它会暂停 45 秒、3 分钟、6 分钟,这样它就会继续
    猜你喜欢
    • 2012-07-05
    • 2016-06-19
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 2014-06-29
    • 2018-11-01
    相关资源
    最近更新 更多