更新時間:2023年01月04日10時46分 來源:傳智教育 瀏覽次數(shù):
在程序開發(fā)中,有時會遇到字節(jié)流和字符流之間需要進行轉(zhuǎn)換的可能。在java.io包中提供了兩個類可以將字節(jié)流轉(zhuǎn)換為字符流,它們分別是InputStreamReader和OutputStreamWriter。
OutputStreamWriter是Writer的子類,能夠?qū)⒁粋€字節(jié)輸出流轉(zhuǎn)換成字符輸出流,方便直接寫入字符,而InputStreamReader是Reader的子類,能夠?qū)⒁粋€字節(jié)輸入流轉(zhuǎn)換成字符輸入流,方便直接讀取字符。下面通過案例學(xué)習如何將字節(jié)流轉(zhuǎn)換為字符流,為了提高讀/寫效率,通過字符緩沖流實現(xiàn)轉(zhuǎn)換的操作,如文件5-9所示。
文件5-9 Example09.java
package com.itheima.example; import java.io.*; public class Example09 { public static void main(String[] args) throws Exception { //創(chuàng)建字節(jié)輸入流 FileInputStream input=new FileInputStream("read.txt"); //將字節(jié)輸入流轉(zhuǎn)換成字符輸入流 InputStreamReader streamReader=new InputStreamReader(input); //賦予字符輸入流對象緩沖區(qū) BufferedReader bufferReader=new BufferedReader(streamReader); //創(chuàng)建字節(jié)輸出流 FileOutputStream output=new FileOutputStream("dest2.txt") //將字節(jié)輸出流轉(zhuǎn)換成字符輸出流 OutputStreamWriter streamWriter=new OutputStreamWriter(output); //賦予字符輸出流對象緩沖區(qū) BufferedWriter bufferWriter=new BufferedWriter(streamWriter); String line=null; //判斷是否讀到文件末尾 while ((line=bufferReader.readLine()) !=null) { bufferWriter.write(line); //輸出讀取到的文件 } bufferReader.close(); bufferWriter.close(); } }
程序運行結(jié)束后,按F5鍵刷新chapter05項目后打開dest2.txt文件,執(zhí)行結(jié)果如圖5-5所示。
圖5-15 dest2.txt
在文件5-9中,實現(xiàn)了字節(jié)流和字符流之間的轉(zhuǎn)換,將字節(jié)流轉(zhuǎn)換為字符流,從而實現(xiàn)直接對字符的讀/寫。需要注意的是,在使用轉(zhuǎn)換流時,只能針對操作文本文件的字節(jié)流進行轉(zhuǎn)換,如果字節(jié)流操作的是圖片或者音頻,此時轉(zhuǎn)換為字符流就會造成數(shù)據(jù)丟失。