1. 程式人生 > >Java-IO流之轉換流的使用和編碼與解碼原理

Java-IO流之轉換流的使用和編碼與解碼原理

鍵盤輸入 tostring delet 特點 rgb utf8 equals pri 數據

一、理論:

1、字符流和字節流區別是什麽?

字符流=字節流+編碼集,在實際讀取的時候其實字符流還是按照字節來讀取,但是會更具編碼集進行查找編碼集字典解析相應的字節,使得一次讀取出一個字符;

2、什麽是轉換流?

轉換流就是原本是字節流,但是讀取到的數據是字符,所以我們希望使用字符流來進行操作,那麽就可以使用轉換流進行轉換;

轉換流=字節流+編碼集。

轉換流的特點是可以指定編碼集。

3、轉換流的作用:

(1)、從控制臺讀取數據輸入(鍵盤輸入),將它們寫入到文件(我們寫的是字符吧);

(2)、當對文件進行解析的時候,如果涉及編碼,就需要使用轉換流進行解碼--------亂碼可不好玩。

二、實戰:

1、從鍵盤輸入的文本保存到文件:

        try (InputStreamReader inReader = new InputStreamReader(System.in)) {
            StringBuilder sb = new StringBuilder();

            int ch;
            try (OutputStream out = new FileOutputStream("console.txt")) {
                while ((ch = inReader.read()) != -1) {
                    if ((char) ch == ‘\r‘)
                        continue;

                    if ((char) ch == ‘\n‘) {
                        System.out.println(sb.toString().toUpperCase());
                        out.write(sb.toString().getBytes());
                        sb.delete(0, sb.length());
                        continue;
                    }

                    sb.append((char) ch);
                    if (sb.toString().equals("esc"))
                        break;
                }
            }

        }

  1)、我們經常使用的System.out.println就是輸入流,自然,和它相對應的就是輸入流,輸入者是鍵盤,輸出的對象是到控制臺;

2、編碼和解碼:

        try (BufferedReader inReaderGBK = new BufferedReader(new InputStreamReader(new FileInputStream("gbk.txt"), "gbk"))) {

            try (BufferedWriter outWriterUTF8 = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("人類簡史.txt"), "utf-8"))) {

                int ch;
                while ((ch = inReaderGBK.read()) != -1) {
                    outWriterUTF8.write(ch);
                }

            }
        }

在上面的代碼中,"gbk.txt" 文件是使用GBK編碼,而 "人類簡史.txt" 文件是使用utf-8;我們使用轉換流把gbk編碼格式的文件轉換成了utf-8編碼格式的文件。原理如下:

1、讀取 "gbk.txt" 的時候,先讀取的是字節,然後根據我們指定的編碼集去查找字典,因此可以讀取出正確的字符;

2、而在寫入 "人類簡史.txt" 文件的時候,字符先是經過了轉換流,轉換流接收到了字符,看了一下自己被指定為utf-8格式的,所以就去查編碼集,把接收到的字符轉換成了utf-8編碼的格式,然後寫入了文件;

3、over。

Java-IO流之轉換流的使用和編碼與解碼原理