淺談緩沖字符流 BufferedReader BufferedWriter用法
緩沖字符流BufferedReader和BufferedWriter
問題:
之前的文件讀寫都是按照字節、字符或者數組來實現的,對於文本文件而言,能否按照行,一行行讀寫呢。
提供瞭BufferedReader和BufferedWriter實現按行讀寫
package com.bjsxt.ios3; import java.io.*; public class TestBufferedReaderWriter { public static void main(String[] args) throws IOException { //1.創建流 BufferedReader br = new BufferedReader(new FileReader("c:/RecorderSDKLog.txt")); BufferedWriter bw = new BufferedWriter(new FileWriter("c:/RecorderSDKLog2.txt")); //2.使用流 String str = br.readLine(); while(str != null){ //輸出當前行數據 System.out.println(str); //寫當前行數據到文件 bw.write(str); //bw.write("\n"); bw.newLine(); //再讀一行 str = br.readLine(); } //3.關閉流 br.close(); bw.close(); } }
總結1:BufferedReader和BufferedWriter的優點
1.速度快
2.簡化編程
總結2:readLine()底層的原理
底層還是一個一個字符的讀取,append()放入到StringBuilder(或者char[] )中,遇到換行符 ,將StringBuilder(char[])轉換成String並返回
總結3:不同的操作系統中換行符是不同的
Unix系統裡,每行結尾隻有“<換行>”,即“\n”;
Windows系統裡面,每行結尾是“<回車><換行>”,即“\r\n”;
Mac系統裡,每行結尾是“<回車>”,即“\r”。
BufferedReader和BufferedWriter 性能較好的原因
原理:
BufferedReader會一次性從物理流中讀取8k(默認數值,可以設置)字節內容到內存,如果外界有請求,就會到這裡存取,如果內存裡沒有才到物理流裡再去讀。即使讀,也是再8k。
而直接讀物理流,是按字節來讀。
對物理流的每次讀取,都有IO操作。IO操作是最耗費時間的。
BufferedReader就是減少瞭大量IO操作,而為你節省瞭時間。
簡單的說,一次IO操作,讀取一個字節也是讀取,讀取8k個字節也是讀取,兩者花費時間相差不多。而一次IO的來回操作卻要耗費大量時間。
好比是一輛大型汽車(設裝100人),要去車站接人到公司,接一個人也是接,接100個人也是接,而時間一樣。顯然,接100個人最劃算。
物理流就是一次一個字節(一個人)
Buffered就是一次8k個字節(100個人)
對於讀取定長字節文件,當然BufferedReader更快瞭!
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Java中FileWriter類的常用方法說明
- Java 如何利用緩沖流讀寫文件
- BufferedWriter如何使用write方法實現換行
- 聊聊為什麼要使用BufferedReader讀取File
- Java深入淺出說流的使用