Я предполагаю, что источником путаницы является то, что InputStream.read()
возвращает int
, а Reader.read()
также возвращает int
.
Разница в том, что InputStream.read()
возвращает байтовые значения в диапазоне от 0 до 255, соответствующие необработанному содержимому потока байтов, а Reader.read()
возвращает символьное значение в диапазоне от 0 до 65357
AnInputStream
позволяет читать содержимое байта за байтом, например, содержимое «a ‡ a» читается как поток из 5 байтов, а именно: 97
, 226
, 128
, 161
и 97
где a -> U+0061 -> 0x61 -> 97
и ‡ -> U+2021 -> 0xE280A1 (utf-8 encoding of 0x2021) -> 226 128 161
.
A Reader
позволяет читать содержимое символа за символом, поэтому содержимое «a ‡ a» читается как 3 символа 97
, 8225
и 97
, где a -> U+0061 -> 0x61 -> 97
и ‡ -> U+2021 -> 0x2021 -> 8225
.