簡體   English   中英

為什么我可以在沒有Eventlistener的情況下使用Java中的BufferedReader進行讀取

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM