JAVA BufferedReader 類從標准輸入讀取數據


1,從標准輸入上建立輸入流:

BufferedReader localReader = new BufferedReader(
                    new InputStreamReader(System.in));

System.in 表示標准輸入,一般指鍵盤。

建立輸入流,從標准輸入讀取數據到緩沖區中。

當在標准輸入中輸入一行字符串時,按回車之后,這行數據就會被讀取到緩沖區中。

比如: abc  \r\n(表示按下回車鍵)

那么msg就會賦值為 abc

String msg = null; while ((msg = localReader.readLine()) != null) { System.out.println(msg);//打印從標准輸入讀取到的數據 process(msg); if (msg.equals("bye"))//當輸入 bye 時 結束 break; } 

 BufferedReader 使用 readLine方法讀取數據時,每次讀取一行。以回車換行標記一行數據的結束。

使用if語句來判斷用戶是否在標准輸入中輸入了bye。若輸入了bye之后,就跳出while循環。若沒有if語句,while循環就不會終止。

 

2,從Java的 InputStream中建立輸入流

從InputStream中輸入與從鍵盤輸入是有區別的,InputStream流可以關閉(異常關閉或正常關閉),而對於鍵盤而言,沒有關閉的概念,只要你從鍵盤敲入字符並按回車就會輸入一行字符。

下面是從Socket的輸入流中建立起BufferedReader的輸入:

BufferedReader localReader = new BufferedReader(
                    new InputStreamReader(socket.getInputStream()));

在此種情況下,當使用while( (str = localReader.readLine()) != null )讀取數據時,何時才能讀取完畢跳出while循環呢?

一種方法是與 1 中討論的一樣,使用一個標記字符串,如"bye",具體解釋看上面。

另一種方法是:因為本例是從Socket的InputStream中讀入數據的,因此當Socket的發送端發完數據后並關閉了Socket,那么接收端就會讀入發送端的數據。當接收端再讀數據時,readLine()就會返回null。此時會跳出while。(若發送端沒有關閉Socket,接收端再讀數據時,就會阻塞等待發送端再發送數據過來。若發送端關閉了Socket,接收端再讀數據時,就會返回null)

 

綜上所述,當在while循環中使用BufferedReader的readLine方法時,while循環退出的條件是:

a)在while循環中使用 if 判斷 結束的標記字符串(如 "bye"),使用break 跳出while,

b)若是建立的Socket連接、或者其他InputStream流的輸入。當發送方關閉了流時,readLine方法再次讀取時會讀到 null 值。這樣也就跳出了while。

 

注意如果是寫數據時,記得flush一下。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM