【问题标题】:"Waiting" for a stream in Java [duplicate]“等待”Java中的流[重复]
【发布时间】:2011-12-13 21:07:56
【问题描述】:

可能重复:
Is it possible to read from a Java InputStream with a timeout?

我正在读取来源可能挂起的流。我如何“等待”BufferedReader.readLine() 返回一个字符串最多一定时间(比如五秒),如果没有读取任何内容,则继续程序?

【问题讨论】:

标签: java stream wait


【解决方案1】:

BufferedReader 具有 ready() 方法,该方法检查输入流是否已准备好读取。您可以将它与计时器类或其他东西结合使用。

【讨论】:

    【解决方案2】:

    请务必注意,这是一个 IO 阻塞调用。因此,中断当前执行该语句的线程绝对没有任何效果。

    执行此操作的一种简洁方法是使用 ExecutorService 执行此调用,方法是将其包装在 Callable 实现中。通过在返回的 future 上调用 get(timeout) 方法,您既可以手动控制超时,也可以优雅地处理中断。

    如果此线程被中断,您将需要关闭底层资源,以便调用本身真正返回并且您不会泄漏线程。类似于 myInputStream.close()。

    【讨论】:

      猜你喜欢
      • 2014-11-01
      • 1970-01-01
      • 2013-06-20
      • 2019-06-29
      • 2019-01-04
      • 2013-03-22
      • 2020-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多