有沒有辦法使BufferedReader.readLine()
不掛?如何使BufferedReader.readLine()不掛起?
我創建一個服務器:
- 檢查該客戶端已交付的任何輸入。
- 如果不是,它會執行其他代碼並最終返回檢查客戶端的輸入。
如何檢查客戶端是否已經交付任何輸入而不運行readLine()
?如果我運行readLine()
,線程將掛起,直到輸入交付?
有沒有辦法使BufferedReader.readLine()
不掛?如何使BufferedReader.readLine()不掛起?
我創建一個服務器:
如何檢查客戶端是否已經交付任何輸入而不運行readLine()
?如果我運行readLine()
,線程將掛起,直到輸入交付?
您可以使用BufferedReader.ready()
,像這樣:
BufferedReader b = new BufferedReader(); //Initialize your BufferedReader in the way you have been doing before, not like this.
if(b.ready()){
String input = b.readLine();
}
ready()
將返回true
如果輸入源尚未將任何東西放入尚未讀取流。
編輯:只要一張紙條,即使只有一個字符存在,隨時會返回true
。您可以使用read()
來檢查是否有換行符或回車符,並且這些將指示行結束。
欲瞭解更多信息:http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#ready()
爲什麼?如果您使用阻止I/O,則服務器應該爲每個客戶端提供一個單獨的讀取線程。 – EJP 2013-03-19 21:48:41
我不想爲每個用戶創建兩個線程。我已經爲每個用戶都有一個線程。 – Cin316 2013-03-19 22:06:16
這是Java I/O庫的不幸現實。你可以是 1)分開讀取線程 2)使用NIO庫 3)不要使用readLine()並自己做自己的緩衝和行尾管理 – creechy 2013-03-19 22:22:41