задачу решил. казалось бы все понял хорошо. но... у нас есть код, который считывает все байты с файла в буфер:
byte[] buffer = new byte[fileReader.available()];
int data = fileReader.read(buffer);
fileReader.close();
но не понятно, как работает эта строчка int data = fileReader.read(buffer); правильно ли я понимаю, что?.. она записывает в buffer байты символов, которые представлены в виде кода ASCII, а в data записывается количество реально прочитанных байтов. Каждая ячейка массива buffer - это один байт, а каждый элемент - это символ, который представлены в виде кода ASCII. я так думал до того момента, пока встречались символы до 127 (то есть до предельного значения байта). но я не задумался о том, как считывает байты символов, которые представлены в виде больше 127, например, кириллица. но задумывался о том, почему же буфер у нас байтового типа, а не инт - ведь символы в ASCII представлены в виде интового значения (от 0 до 255). наверное, потому что метод .read() имеет только тип параметра byte[] (или вообще не имеет) немного поэкспериментировав
byte[] myByte = "я".getBytes();
System.out.println(Arrays.toString(myByte)); // [-47, -113]

InputStream in = new ByteArrayInputStream(myByte);
byte[] buffer = new byte[in.available()];
int myInt = in.read(buffer);

System.out.println(Arrays.toString(buffer)); // [-47, -113]
System.out.println(myInt); // 2
отсюда видно, что один символ больше 127 считывается как два символа, то есть как два байта, но не могу понять почему именно как два байта. подскажите, пожалуйста, почему? _______________________________________________________
byte[] myByte = "я".getBytes();
System.out.println(Arrays.toString(myByte)); // [-47, -113]

InputStream in = new ByteArrayInputStream(myByte);

int myInt = in.read();
System.out.println(myInt); // 209
в этом случае, in.read(); вовзращает один байт, символ, который представлен в виде кода ASCII. но почему 209?