聊聊、BufferedReader readLine 方法


最近跟一個小伙伴在群里聊天,他說用 readLine 讀取網絡設備的數據為什么會這么慢?

說實話,平時我們用 BufferedReader 、BufferedWriter 比較多,但是一般是讀取文件較多。

代碼:

Socket socket = new Socket();

socket.bind(new InetSocketAddress("hostname", port));

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

String line = "";

while(true){

line = br.readLine();

if(line == null){

  break;

}

System.out.println(line);

}

問題是上面的輸出很慢,看了上面的代碼,有不少的問題,不只是輸出慢,程序很有可能卡死在這里。如果優化,應該這樣寫:

while(null != (line = br.readLine())){

// todo

}

readLine 有幾點需要注意:

1.readLine 方法如果獲取不到數據,會一直阻塞,而不是返回 null,除非發生異常或者發送方 close

2.如果數據沒有行換符('\n')、回車('\r')、或者('\r\n'),那么 readLine 不會返回,直到緩存滿或者文件結尾為止,緩存是 8192 個字符

3.BufferedReader 不適用網絡傳輸

 

最后,上面慢的原因是,數據沒有換行符,回車符,一直到 8192 字符緩存滿才返回,所以慢。

 


免責聲明!

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



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