看到InputStreamReader和OutputStreamWriter的一些说法,
说InputStreamReader是将字节流转换成字符流,而OutputStreamWriter则相反,是将字符流转换成字节流;
但是
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("xxxx")));
这句代码中,明显OutputStreamWriter接收的是一个字节流,而返回的则是个字符流,
所以上面的说法应该是错误的吧?
額...這個...
OutputStreamWriter的建構方法傳入參數是一個OutputStream位元組流,也就是把OutputStream轉換成OutputStreamWriter,從這個角度看是「位元組流轉換成字元流」。
OutputStreamWriter在write的時候,你傳入了字符,但是最終IO寫出的是字節流,這個角度看來是「字符流轉換成字節流」。
所以兩種說法都對。
「位元組流轉換成字元流」是指API的轉換,「字元流轉換成位元組流」是指在write的時候資料的轉換。
其實你只要知道,電腦本身只支援01010101這樣的二進位字節,而字元或字串都是字節編碼得到的,OutputStreamWriter只是多了一步編碼操作而已。
構造 OutputStreamWriter 的是一個 FileOutputStream,這個 stream 其實是被封裝在 writer 中,向 writer 進行的所有寫入操作最終都會寫入 stream 中。但是向 writer 進行寫入操作的時候,寫入的是字串,而 writer 會將傳入的字串轉換為字元流寫入 stream 中…所以呢…
雷雷 雷雷