[英]How can I read from a BufferedReader in Java without blocking?
[英]Why can I read with a BufferedReader in Java without Eventlistener
我對動作腳本感到滿意。 當我想在空中訪問網絡時,我對請求進行了編碼,然后等待EventListener啟動。
目前,我正在使用以下android代碼(包裝在try / catch中)進行Java教程:
url = new URL("http://www.google.com");
URLConnection conn = url.openConnection();
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream());
String line = '';
while((line = reader.readLine()) != null) {
// do something with the line
}
我不知道這是如何工作的。
為什么不需要eventListener? 如果在請求URL后立即執行代碼,則在while-Construct啟動時可能未檢索到URL。
在此期間,應用程序是否剛剛暫停? 如果是,是否可以通過事件列表器實現?
謝謝你的幫助!
發生的情況是,每次請求提供數據時(當您在BufferedReader
上調用reader.readLine()
或任何其他readXXX
方法時), BufferedReader
都將請求其底層InputStream
的數據。 因此, InputStream
負責在那時提供它-可能是否可能(例如,如果連接已關閉)。
在這種特定情況下, URLConnection
提供的InputStream
將返回在先前的讀取請求中緩存的數據,或者從其指向的URL請求更多數據。
因此,在您調用BufferedReader
上的readLine
之前,不會讀取任何實際數據。 您剛剛打開了與服務器的連接。
在此期間,應用程序是否剛剛暫停?
是。 常規Java IO類是同步的。 對readLine()
的調用將阻塞,直到可以返回一行或出現異常為止。
如果是,是否可以通過事件列表器實現?
是的,通過使用java.nio
包中的java.nio
。 但僅具有較低級別的接口。
通常,Java應用程序使用多線程而不是事件隊列來處理這種情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.