1. 程式人生 > >Java IO6:字符流進階及BufferedWriter、BufferedReader

Java IO6:字符流進階及BufferedWriter、BufferedReader

但是 () 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