2011-10-24 95 views
0

可能重複:
Is it possible to read from a Java InputStream with a timeout?「等待」 一個流

我從他的根源可以掛一個流中讀取。我怎樣才能「等待」BufferedReader.readLine()返回一個字符串最長特定時間(比如5秒),如果沒有任何內容被讀取,繼續執行程序?

+3

您可以在這裏檢查:http://stackoverflow.com/questions/804951/is-it-possible-to-read-from-a-java-inputstream-with-a-timeout – kamaci

+0

謝謝,這應該解決我的問題問題。 – pistacchio

回答

1

BufferedReader有ready()方法,它檢查輸入流是否準備好可讀或不可讀。你可以使用它與定時器類或其他東西結合使用。

0

重要的是要注意這是一個IO阻塞調用。因此,中斷當前正在執行此語句的線程將完全沒有影響。

這樣做的一個簡單方法是通過將它包裝在Callable實現中來執行與ExecutorService的調用。通過在返回的將來調用get(timeout)方法,您既可以手動控制超時,也可以正常處理中斷。

如果此線程中斷,您將需要關閉底層資源,以便調用本身將實際返回並且不泄漏線程。就像myInputStream.close()。