經過試驗,OutputStreamWriter在寫文件的時候是有緩沖區的,這個緩沖區和BufferedWriter類的緩沖區在使用上有什麼區別?(除了WriterLine這點區別)
也就是說,實際上BufferedWriter類和BufferedReader類都有兩層緩沖區,這兩層緩沖區的作用分別是什麼呢?
先謝過各位大神了!
首先OutputStreamWriter和BufferedWriter的缺省buffer size是不一樣的OutputStreamWriter是8k bytes,BufferedWriter是8k chars。其次,OutputStreamWriter底層使用的是StreamEncoder,也就是對charset進行了編碼,舉個例子,你是完全可以本地采用比如gb2312的編碼而寫到一個utf-8文件裡去的,這個時候你會用OutputStreamWriter。當然缺省的話是使用本地的charset。即使使用缺省的charset,OutputStreamWriter是會把沒法轉碼的字符轉成malformed surrogate,而BufferedWriter是不會的。
至於你說的兩層緩沖,我猜你可能指的是寫文件的時候,一般操作系統對文件都有自己的緩沖系統。但是這個只是因為底層是文件系統,假設你操作socket,采用buffer可以使得封包大小更合理。
還有一點,BufferedWriter封裝的是writer,也就是當buffer滿了讓別的writer去處理輸出,而OutputStreamWriter封裝的事數據流(OutputStream),它是讓數據流去處理輸出。stream和writer的不同不用說,一個是二進制數據,一個是字符數據,這兩個根本就不一樣了。