В общем, скопились вопросы по байтам, точнее про кодировки, их запись и чтение, а не про байт как сущность. Хотелось бы, чтобы те, кто понимают, разъяснили все и поставили все по полочкам.
1. Есть файл с содержанием привет. Если сделать так: System.out.println(inputStream.available()); , то будет выводиться, что всего 12 байт в файле. Если добавить 111 до привет, то будет уже 15 байт. Почему некоторые символы занимают 2 байта, а некоторые всего 1? Имеется ввиду, почему не все символы занимают два байта? Ведь как можно считывать символы из файла, если неизвестно, сколько один символ занимает - один байт или два байта?
2. Допустим есть этот вот привет в файле. Как его можно считать побайтово и вывести в консоль? Пробовал что-то такое:
while (inputStream.available() > 0) {
int result = inputStream.read() | (inputStream.read() << 8);
System.out.println(result);
System.out.println((char)result);
}
Результата нет, и значения слишком огромные. Как же тогда считать по одному байту и соединить два разных байта в один полноценный двухбайтовый символ?
3. Как точно байты сохранены в файле? Это что-то, вроде: "010110011001100110001010" и так до конца файла? Если так, то как можно считывать символы из такого формата? Ведь есть вариант, что первые два байта - это символ, а есть вариант, что последние два байта - символ, а есть вариант, что тут три разных символа.
В общем, так как я крайне запутан в этой теме, то хотелось бы даже не только ответы на вопросы, а больше пояснение про байты. Эта тема на курсах (по крайней мере, до 30х уровней точно) раскрыта довольно слабенько, и дается только поверхностно, вроде "InputStream и OutputStream - для байтов, а Reader и Writer - для символов", но нигде нет объяснений, каким образом Reader, например, разбирается, как правильно считывать символы, если они разных длин, как байты сохраняются в файле и другие подробности. Может кто-нибудь помочь с этим? :)