- CharArrayReader/CharArrayWriter與ByteArrayInputStream/ByteArrayOutputStream原理類似,不涉及真正的I/O操作,對内部提供一個char數組,所有讀/寫操作都針對這個數組進行。
- BufferedReader與BufferedWriter與BufferedInputStream/BufferedOutPutStream原理類似,構造函數需要一個字元輸入/輸出流作為入參。内部以一個字元數組作為緩存,将底層輸入/輸出流的資料一次性讀取到緩存數組中
- FileReader 與FileWriter是針對檔案的字元輸入/輸出流,FileReader隻是InputStreamReader的子類,FileWriter隻是OutputStreamWriter的子類,其本身并沒有任何特殊實作,字元的輸入/輸出都是靠父類實作的
PrintWriter提供了對輸出内容的格式化。
a. 對于構造函數傳入的OutputStream執行個體,最後會被封裝成
b.對于傳入的File執行個體或者fileName,最後會被封裝成
new BufferedWriter(new OutputStreamWriter(out)
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();
}
}