您好,登錄后才能下訂單哦!
這篇文章主要講解了“BufferedReader的讀取效率問題舉例分析”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“BufferedReader的讀取效率問題舉例分析”吧!
正常采用readline讀取,一行行讀取。
readline要注意阻塞的情況,當一行沒有"/r"、"/n"、"/r/n"就會阻塞在那。
InputStreamReader isr = new InputStreamReader(connection.getInputStream(), "UTF-8"); in = new BufferedReader(isr); String line; while ((line = in.readLine()) != null) { result += line; }
inputStream = connection.getInputStream(); isr = new InputStreamReader(inputStream, "UTF-8"); in = new BufferedReader(isr); CharBuffer bos = CharBuffer.allocate(20480); StringBuilder builder = new StringBuilder(); while (in.read(bos) != -1) { bos.flip(); builder.append(bos.toString()); }
注:bos.flip()作用是將指針指向緩沖區的開頭
經過一千條數據的讀取,發現采用read+CharBuffer的效率要比readline來的高效的多!!!!
補充:
后續實驗中發現,其實并不是read方法和CharBuffer高效。其實是String對象頻繁的創建導致效率低下,使用CharBuffer和StringBuilder解決了這一問題。
在OJ系統中做編程題時,如果從System.in讀入的數據非常大的時候,使用Scanner非常影響效率,可能導致最終代碼超時,所以最好改用BufferedReader來讀取字符數據。
例如:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[]args) { BufferedReader buf=null; buf=new BufferedReader(new InputStreamReader(System.in)); String str=null; try { int a= Integer.parseInt(buf.readLine()); double b=Double.parseDouble(buf.readLine()); } catch (IOException e) { e.printStackTrace(); } System.out.println(); } }
感謝各位的閱讀,以上就是“BufferedReader的讀取效率問題舉例分析”的內容了,經過本文的學習后,相信大家對BufferedReader的讀取效率問題舉例分析這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。