天天看點

(九)字元輸入流/輸出流

  1. CharArrayReader/CharArrayWriter與ByteArrayInputStream/ByteArrayOutputStream原理類似,不涉及真正的I/O操作,對内部提供一個char數組,所有讀/寫操作都針對這個數組進行。
  2. BufferedReader與BufferedWriter與BufferedInputStream/BufferedOutPutStream原理類似,構造函數需要一個字元輸入/輸出流作為入參。内部以一個字元數組作為緩存,将底層輸入/輸出流的資料一次性讀取到緩存數組中
  3. FileReader 與FileWriter是針對檔案的字元輸入/輸出流,FileReader隻是InputStreamReader的子類,FileWriter隻是OutputStreamWriter的子類,其本身并沒有任何特殊實作,字元的輸入/輸出都是靠父類實作的
  4. PrintWriter提供了對輸出内容的格式化。

      a. 對于構造函數傳入的OutputStream執行個體,最後會被封裝成

    new BufferedWriter(new OutputStreamWriter(out)

      b.對于傳入的File執行個體或者fileName,最後會被封裝成

    new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName)

      c. 對于字元集的指定都是靠OutputStreamWriter完成的

      e. 不會抛出異常,異常将在内部被捕獲并标記,通過checkError()可以判斷是否出現異常。

      f. 因為使用BufferedWriter,是以輸出的資料會放在緩存中,不會馬上輸出。

      g. println()函數的實作是将輸出分為兩部分:輸出字元;輸出換行。通過synchronized保證原子性。  

public void println(float x) {
        synchronized (lock) {
            print(x);
            println();
        }
    }