Java IO6:字符流進階及BufferedWriter、BufferedReader
阿新 • • 發佈:2019-03-08
但是 () system lose http ade reader col tor
字符流和字節流的區別
拿一下上一篇文章的例子:
1 public class Test { 2 public static void main(String[] args) throws IOException { 3 File file = new File("D:" + File.separator + "readerAndWriter.txt"); 4 //創建字符輸出流 5 Writer writer = new FileWriter(file); 6 String content = "hello World 中國 center 執行";7 //將內容寫入文件 8 writer.write(content); 9 //關閉輸出流 10 // writer.close(); 11 12 //創建字符輸入流 13 Reader reader = new FileReader(file); 14 char[] chars = new char[1024]; 15 //將文件的內容讀取到chars數組中,並返回讀取到的字符個數 16 int characterNumbers = reader.read(chars);17 if(characterNumbers == -1){ 18 System.out.println("文件中無內容"); 19 }else{ 20 //輸出讀取到的內容 21 System.out.println(new String(chars)); 22 } 23 reader.close(); 24 } 25 }
註意第十行,將writer.close()方法註釋之後,此時將無法將字符串寫入文件
控制臺輸出:
說明一下原因:
字符流和字節流非常相似,但也有區別,從網上找了一張圖:
、
從圖上看,字符流和字節流最大的區別在於,字節流在操作時本身不會用到緩沖區(內存),是文件本身直接操作的,而字符流操作時使用了緩沖區,通過緩沖區再操作文件。這也解釋了上面程序的那個問題,為什麽不對資源進行close()就無法寫入文件的原因。因為在關閉字符流時會強制性地將緩沖區中的內容進行輸出,但是如果沒有關閉,緩沖區中的內容是無法輸出的。
什麽是緩沖區?簡單理解,緩沖區就是一塊特殊的內存區域。為什麽要使用緩沖區?因為如果一個程序頻繁操作一個資源(文件或數據庫),則性能會很低,為了提升性能,就可以將一部分數據暫時讀入到內存的一塊區域之中,以後直接從此區域讀取數據即可,因為讀取內存的速度要快於讀取磁盤中文件內容的速度。
在字符流的操作中,所有的字符都是在內存中形成的,在輸出前會將所有的內容暫時保存在內存之中,所以使用了緩沖區。
如果不想在關閉時再輸出字符流的內容也行,使用Writer的flush()方法就可以了。
https://blog.csdn.net/Bazingaea/article/details/51277344
Java IO6:字符流進階及BufferedWriter、BufferedReader