Java 字節流、字符流和轉換流之間的關係

1. 字節流、字符流和轉換流之間的關係

(1)字節流:讀取字節到內存或將字節寫入硬盤文件中。

(2)字符流:將字節轉換爲字符(讀入)或將字符轉換爲字節(寫出)。

(3)轉換流:將字節按照指定的編碼格式轉換爲字符(讀入),或將字符按照指定的編碼格式轉換爲字節(寫出),字節(字符)通向字符(字節)的橋樑。

2.說明

        上圖中,硬盤中文件1.txt中有文字【你好】,如果編碼格式爲GBK,則存儲的字節個數爲4個,利用字節輸入流FileInputStream將字節讀取到字符流緩衝區,FileReader字符流會依據工作環境IDEA的編碼格式對讀取的字節進行解碼,然後IDEA的編碼格式爲UTF-8,則會出現亂碼。如果使用轉換流InputStreamReader將字節轉換爲字符,該轉換流可以使用默認的編碼或者指定的編碼格式,進而保證解碼的準確性,最終讀入內存。

        上圖中,將內存中的【你好】寫出到硬盤文件1.txt中,使用字符輸出流FileWriter時,該字符流會將你好按照IEDA的默認編碼格式UTF-8將字符轉換爲字節,存入緩衝區,之後利用FileOutputStream字節流,將緩衝區內容寫出到文件中,此時文件內容的編碼格式會默認爲UTF-8。如果使用OutputStreamWriter轉換流可以使用指定的編碼格式將字符轉換爲字節,之後利用字節流將字節寫入文件。

3.案例

(1)輸出轉換流案例:

/**
 * OutputStreamWriter轉換流
 * (1)OutputStreamWriter(OutputStream out);使用默認編碼格式,將字符編碼成字節
 * (2)OutputStreamWriter(OutputStream out,String charsetName);使用指定編碼格式,將字符編碼成字節
 */
private static void osw01() throws Exception {
    OutputStream os = new FileOutputStream("E:\\kankan\\1.txt");
    OutputStreamWriter osw = new OutputStreamWriter(os, "utf-8");
    osw.write("你好");
    osw.flush();
    osw.close();
}

(2)輸入轉換流案例:

 /*
 * InputStreamReader轉換流
 * (1)InputStreamReader(InputStream in);使用默認的編碼格式,將字節轉換爲字符
 * (2)InputStreamReader(InputStream in,String charsetName);使用指定編碼格式,將字節轉換爲字符
 */
private static void isr01() throws IOException {
    InputStream is = new FileInputStream("E:\\kankan\\1.txt");
    InputStreamReader isr = new InputStreamReader(is,"utf-8");
    char[] chs = new char[1024];
    int len = 0;
    while((len=isr.read(chs))!=-1){
        System.out.println(new String(chs,0,len));
    }
    isr.close();
}

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章