В чем разница между Reader и InputStream?

В чем разница между Reader и InputStream? А 9X_java-se когда что использовать? Если я могу использовать 9X_files Reader для чтения символов, почему я буду 9X_openjdk использовать поток ввода, я думаю, для чтения 9X_jdk объектов?

93
1

  • Что касается «Я предполагаю читать объекты?», Существуют специальные потоки ввода / вывода для чтения / записи объектов Java. Это ObjectInputS ...
5
Общее количество ответов: 5

Ответ #1

Ответ на вопрос: В чем разница между Reader и InputStream?

InputStream - это необработанный метод получения 9X_inputstream информации из ресурса. Он захватывает данные 9X_java побайтно, не выполняя никакого преобразования. Если 9X_.java вы читаете данные изображения или любой 9X_j2se двоичный файл, этот поток следует использовать.

Reader 9X_fileinputstream разработан для символьных потоков. Если 9X_core-java информация, которую вы читаете, представляет 9X_jre собой весь текст, то Reader позаботится 9X_j2se о декодировании символов за вас и предоставит 9X_java-api вам символы Unicode из необработанного входного 9X_j2se потока. Если вы читаете текст любого типа, этот 9X_jdk поток следует использовать.

Вы можете обернуть 9X_java InputStream и превратить его в Reader с 9X_files помощью класса InputStreamReader.

Reader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);

148
0

Ответ #2

Ответ на вопрос: В чем разница между Reader и InputStream?

InputStreams используются для чтения байтов 9X_filereader из потока. Поэтому они полезны для двоичных 9X_javax данных, таких как изображения, видео и сериализованные 9X_j2se объекты.

С другой стороны, считыватели представляют 9X_oraclejdk собой символьные потоки, поэтому их лучше 9X_jre всего использовать для чтения символьных 9X_java-api данных.

19
0

Ответ #3

Ответ на вопрос: В чем разница между Reader и InputStream?

Я предполагаю, что причиной путаницы является 9X_j2se то, что InputStream.read() возвращает int, а Reader.read() также возвращает 9X_java-se int.

Разница в том, что InputStream.read() возвращает байтовые 9X_oraclejdk значения от 0 до 255, соответствующие необработанному 9X_java-se содержимому байтового потока, а Reader.read() возвращает 9X_java-libraries символьное значение от 0 до 65357. (поскольку 9X_file существует 65358 различных кодовых точек 9X_core-java Unicode)

InputStream позволяет читать содержимое байтом 9X_.java за байтом, например, содержимое «a ‡ a» состоит 9X_java-libraries из 3 символов, но закодировано в 5 байтах 9X_jre в UTF-8. Таким образом, с Inputstream вы можете прочитать 9X_java-api его как поток из 5 байтов (каждый из которых 9X_fileinputstream представлен как int между 0 и 255), что приведет 9X_java-libraries к 97, 226, 128, 161 и 97 где

a -> U+0061 -> 0x61 (hex) -> 97 (dec)
‡ -> U+2021 -> 0xE280A1 (utf-8 encoding of 0x2021) -> 226 128 161 (1 int per byte)
a -> U+0061 -> 0x61 (hex) -> 97 (dec)

Reader позволяет читать содержимое 9X_filereader символ за символом, поэтому содержимое «a 9X_filereader ‡ a» читается как 3 символа 97, 8225 и 97 где

a -> U+0061 -> 0x61 -> 97
‡ -> U+2021 -> 0x2021 -> 8225 (single int, not 3)
a -> U+0061 -> 0x61 -> 97

Символ 9X_java-se ‡ упоминается как U+2021 in Unicode

14
0

Ответ #4

Ответ на вопрос: В чем разница между Reader и InputStream?

Один принимает байты, а другой - символы.

9X_filereader

1
0

Ответ #5

Ответ на вопрос: В чем разница между Reader и InputStream?

InputStream accept byte , Читатель принимает 9X_j2se символ, В Java один символ = два байта, и 9X_oraclejdk Читатель использует буфер, InputStream не 9X_java использует. Все файлы хранятся на диске 9X_j2se или передаются на основе байтов, включая 9X_core-java изображения и видео, но символ находится 9X_file в памяти, поэтому InputStream используется 9X_jdk часто.

1
0