1. 程式人生 > >Java IO中轉換流的作用

Java IO中轉換流的作用

utf except image code 需要 cep inf java網絡編程 解析

在《Java網絡編程》中,有這樣一段話:

”Reader和Writer最重要的子類是InputStreamReader和OutputStreamWriter類。

InputStreamReader類包含了一個底層輸入流,可以從中讀取原始字節。它根據指定的編碼方式,將這些字節轉換為Unicode字符。

OutputStreamWriter從運行的程序中接收Unicode字符,然後使用指定的編碼方式將這些字符轉換為字節,再將這些字節寫入底層輸出流中。“

轉換流的特點:

1. 其是字符流和字節流之間的橋梁

2. 可對讀取到的字節數據經過指定編碼轉換成字符

3. 可對讀取到的字符數據經過指定編碼轉換成字節

什麽時候使用轉換流呢?

1,源或者目的對應的設備是字節流,但是操作的卻是文本數據,可以使用轉換作為橋梁。提高對文本操作的便捷。 參見示例1-1 1-2

2,一旦操作文本涉及到具體的指定編碼表時,必須使用轉換流 。參見示例2-1 2-2

關於指定編碼表的作用,建議參考這篇文章從內存角度解析Java字符編碼,一定會豁然開朗的。
技術分享圖片

具體的對象體現:

1. InputStreamReader:字節到字符的橋梁

2. OutputStreamWriter:字符到字節的橋梁

這兩個流對象是字符體系中的成員,它們有轉換作用,本身又是字符流,所以在構造的時候需要傳入字節流對象進來。

示例1-1:字節流System.in轉為字符流BufferedReader

讀取鍵盤輸入的每一行內容,並寫入到文本中,直到遇到over行結束輸入

public static void main(String[] args) throws IOException {
 
        //字節流-->字符流
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new FileWriter("is2.txt"));
        String line = null
; while((line = br.readLine())!=null){ if("over".equals(line)){ break; } bw.write(line); bw.newLine(); bw.flush(); } bw.close(); br.close(); }

實例1-2 字符流BufferedReader轉為字節流System.out

public static void main(String[] args) throws IOException {
 
        BufferedReader br = new BufferedReader(new FileReader("is2.txt"));
        //字符流-->字節流      
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        String line = null;
        while ((line = br.readLine())!=null) {
            bw.write(line);
            bw.newLine();
            bw.flush();
        }
        bw.close();
        br.close();
    }

示例2-1 采用指定的編碼讀取文本文件

public static void main(String[] args) throws IOException {
 
        //在IO流中,如果想指定編碼讀寫數據,只能使用轉換流。
        //采用指定編碼從文本文件中讀取內容
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("C:\\a.txt"), "UTF-8"));
        String line = null;
        while ((line=br.readLine())!=null) {
            System.out.println(line);
        }
        br.close();
    }

實例2-2 采用指定的編碼輸出文本文件

public static void main(String[] args) throws IOException {
 
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("C:\\a.txt"), "UTF-8"));
        bw.write("I am 君山");
        bw.close();
    }

轉載 https://blog.csdn.net/u013905744/article/details/51924258/

Java IO中轉換流的作用