在Java中“等待”流

时间:2011-10-24 05:59:44

标签: java stream wait

  

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

我正在从一个源可能会挂起的流中读取。如何“等待”BufferedReader.readLine()返回字符串最多一段时间(比如五秒)并在没有读取任何内容的情况下继续执行该程序?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

请注意,这是一个IO阻止调用。因此,中断当前正在执行此语句的线程将完全没有效果。

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

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