“等待”Java中的流[重复]
Posted
技术标签:
【中文标题】“等待”Java中的流[重复]【英文标题】:"Waiting" for a stream in Java [duplicate] 【发布时间】:2011-12-13 21:07:56 【问题描述】:可能重复:Is it possible to read from a Java InputStream with a timeout?
我正在读取来源可能挂起的流。我如何“等待”BufferedReader.readLine()
返回一个字符串最多一定时间(比如五秒),如果没有读取任何内容,则继续程序?
【问题讨论】:
您可以在这里查看:***.com/questions/804951/… 谢谢,这应该可以解决我的问题。 【参考方案1】:BufferedReader 具有 ready() 方法,该方法检查输入流是否已准备好读取。您可以将它与计时器类或其他东西结合使用。
【讨论】:
【参考方案2】:请务必注意,这是一个 IO 阻塞调用。因此,中断当前执行该语句的线程绝对没有任何效果。
执行此操作的一种简洁方法是使用 ExecutorService 执行此调用,方法是将其包装在 Callable 实现中。通过在返回的 future 上调用 get(timeout) 方法,您既可以手动控制超时,也可以优雅地处理中断。
如果此线程被中断,您将需要关闭底层资源,以便调用本身真正返回并且您不会泄漏线程。类似于 myInputStream.close()。
【讨论】:
以上是关于“等待”Java中的流[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Spring专题「Web请求读取系列」如何构建一个可重复读取的Request的流机制