轉(zhuǎn)換流


轉(zhuǎn)換流包括兩個(gè):OutputStreamWriter和InputStreamReader

OutputStreamWriter:是Writer的子類,將輸出的字符流變?yōu)樽止?jié)流,即將一個(gè)字符流的輸出對象變?yōu)樽止?jié)流輸出對象。

InputStreamReader:是Reader的子類,將輸入的字節(jié)流變?yōu)樽址?,即將一個(gè)字節(jié)流的輸入對象變?yōu)樽址鞯妮斎雽ο蟆?/p>

InputStreamReader這個(gè)類是按照指定編碼讀取字節(jié)流將其解碼為字符流 。也就是說它是先讀取字節(jié)流,先將文件以字節(jié)流的方式轉(zhuǎn)換為對象,再由該類解碼為字符,具體如下:(下面是一個(gè)以按照UTF-8編碼字節(jié)流從a.txt文件讀入,再解碼為字符流,最后以字符流寫入到b.txt文件中)

FileWriter fileWriter = new FileWriter("C:\\myPicture\\b.txt");

FileInputStream fStream = new FileInputStream("C:\\myPicture\\a.txt");

//InputStreamReader isr =newInputStreamReader(in);這樣創(chuàng)建對象,會(huì)用本地默認(rèn)碼表讀取,將會(huì)發(fā)生錯(cuò)誤解碼的錯(cuò)誤

InputStreamReader iStreamReader = new InputStreamReader(fStream,"UTF-8");//以指定的字符編碼讀取字節(jié)流讀并解碼為字符流

int len = 0;

char[] cbuf =new char[1024];

while((len=iStreamReader.read(cbuf))!=-1){

fileWriter.write(cbuf,0,len);

}

fileWriter.flush();

fStream.close();

iStreamReader.close();

fileWriter.close();

轉(zhuǎn)換流和子類區(qū)別

發(fā)現(xiàn)有如下繼承關(guān)系:

OutputStreamWriter: --子類FileWriter:

InputStreamReader:---子類FileReader;

父類和子類的功能有什么區(qū)別呢?

OutputStreamWriter和InputStreamReader是字符和字節(jié)的橋梁:也可以稱之為字符轉(zhuǎn)換流。字符轉(zhuǎn)換流原理:字節(jié)流+編碼表。

FileWriter和FileReader:作為子類,僅作為操作字符文件的便捷類存在。當(dāng)操作的字符文件,使用的是默認(rèn)編碼表時(shí)可以不用父類,而直接用子類就完成操作了,簡化了代碼。

InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"));//默認(rèn)字符集。

InputStreamReader isr = new InputStreamReader(new

FileInputStream("a.txt"),"GBK");//指定GBK字符集。

FileReader fr = new FileReader("a.txt");

這三句代碼的功能是一樣的,其中第三句最為便捷。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容