Как работают кодировки?

У меня есть следующий код:

import java.io.*;

class Main{
        public static void main(String[] args) throws Throwable{

                PrintWriter aa = new PrintWriter("qwer.txt", "UTF-8");
                aa.write('й');
                aa.flush();
                FileInputStream j = new FileInputStream("qwer.txt");
                System.out.println(j.read());
                System.out.println(j.read());
                InputStreamReader g = new InputStreamReader(new FileInputStream("qwer.txt"), "UTF-8");
                System.out.println(g.read());

        }
}

Я создаю символьный поток с кодировкой UTF-8 и записываю в файл символ й.

Согласно следующей таблице:

введите сюда описание изображения

значения символа й в кодировке UTF-8 равно 53433 или 208 и 185 если по байтам. Метод j.read() байтового потока, вызванный два раза подряд, выдаёт вполне логичные две строчки 208 и 185. После чего я создаю символьный поток ввода для того, чтобы прочитать сразу один символ. Создаю его в той же кодировке. Я ожидаю, что метод g.read() вернёт число 53433, но к моему удивлению он возвращает 1081. Причём я попробовал все возможные кодировки и если методы j.read() всегда изменяет своё значение согласно данной таблице, то вот g.read() каждый раз возвращает 1081. Почему ?


Ответы (0 шт):