關於轉換流的一點理解

先看如下代碼:

public class ConvertTest {
    public static void main(String[] args) {
        byte[] a = new byte[8];
        try {
            System.in.read(a);
            System.out.write(a);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在這裏插入圖片描述
\quad我工程默認的字符集爲UTF-8,所以每個ASCII字符佔1字節,這裏我們看到,我們通過write把字節數組輸出到控制檯的時候,並不是直接以字節的形式出現的,這意味着不僅僅在read的時候字節輸入流把讀取的字符decode成了字節然後讀入字節數組,同樣在write的時候字節輸出流把寫出字節數組的字節encode成了字符。
\quad轉換流是連通字節流和字符流的橋樑,InputstreamReader是字節流通向字符流的橋樑,它使得原本只能寫入字節到緩衝內存的InputStream類型的System.in可以寫入字符,OutputStreamWriter是字符流通向字節流的橋樑,它使得原本只能從緩衝內存讀出字節的PrintStream類型的System.out可以讀出字符
\quad但是,無論是InputStream的System.in還是PrintStream的System.out,它們的方法本身並不支持上述操作。
在這裏插入圖片描述
在這裏插入圖片描述
至於那個int,暫時不懂,個人猜想應該有相應的編碼方式。(我要是懂的話就直接解釋源碼了。。)
\quad所以我認爲,InputStreamReader應該是把本來應該寫入的字節轉換成了字符再寫入字符串,OutputStream應該是把字符串裏的字符轉換成本來應該讀出的字節。
\quad其它的等我頭髮變少了的時候再完善吧。。

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