4 ответов:
InputStream-это необработанный метод получения информации из ресурса. Он захватывает данные байт за байтом без выполнения какого-либо перевода. Если Вы читаете данные изображения, или любой двоичный файл, это поток для использования.
читатель предназначен для потоков символов. Если информация, которую Вы читаете, - это весь текст, то читатель позаботится о декодировании символов для вас и предоставит вам символы unicode из исходного входного потока. Если Вы читаете какие-либо тип текста, это поток для использования.
вы можете обернуть InputStream и превратить его в средство чтения с помощью класса InputStreamReader.
Reader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
входные потоки используются для чтения байтов из потока. Поэтому они полезны для двоичных данных, таких как изображения, видео и сериализованные объекты.
читатели с другой стороны являются символьными потоками, поэтому они лучше всего используются для чтения символьных данных.
Я думаю, что источник путаницы в том, что
InputStream.read()возвращаетintиReader.read()возвращаетint.разница в том, что
InputStream.read()возвращает значения байтов от 0 до 255, соответствующие исходному содержимому потока байтов иReader.read()возвращает символьное значение, которое находится между 0 и 65357An
InputStreamпозволяет читать содержимое байт за байтом, например содержимое "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.
Comments