

轉(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");
這三句代碼的功能是一樣的,其中第三句最為便捷。