В чем разница между Reader и InputStream?
Или, другими словами, какая разница между «потоком байтов» и «потоком символов»?
Интересно, когда я должен использовать InputStream или Reader в противном случае, не могли бы вы предложить материал для
меня для понимания вопроса?основной вопрос ввода-вывода
ответ
в простом разговоре: Откройте интересующий файл в блокноте или какой-либо другой текстовый редактор. Может вы читаете, как будто это естественный язык? Тогда вам, скорее всего, понадобится Reader
, чтобы прочитать его также на Java, в итоге вы получите Strings. Вы вместо этого видите какой-то «мусор»? Затем вам понадобится InputStream
, чтобы прочитать его на Java, вы получите байт-массивы (или потоки). Известными примерами двоичных файлов являются файлы изображений (gif, jpg, png и т. Д.) И офисные документы (doc, xls, ppt, pdf и т. Д.).
Вы также можете использовать InputStream
, чтобы открыть текстовые файлы, но вы действительно не хотите использовать Reader
для открытия двоичных файлов, потому что нет никаких средств кодирования символов. То же самое относится к использованию OutputStream
и Writer
. Ни в коем случае не используйте Writer
для создания двоичных файлов.
Основной вопрос I/O приводит к Basic I/O tutorial :)
InputStream
/OutputStream
ручки байт, Reader
/Writer
обрабатывают многобайтовые символы.
В основном работа читателя с типом char
полезна для читаемого человеком текста.
... класс для чтения символьных потоков ...
работа потока непосредственно с типом byte
полезными для двоичных данных.
..class [..], представляющий входной поток байтов ...
Ссылка читать дальше: Java I/O streams
Цитата:
Если вы не работаете с двоичными данными, такими как изображения и звуковые файлы, вы должны использовать чтения и записи (потоки символов) для чтения и записи информации по следующим причинам:
-Они может обрабатывать любой символ в Набор символов Unicode (в то время как потоки байтов ограничены 8-разрядными байтами ISO-Latin-1).
-Они облегчаются интернационализацией, поскольку они не зависят от конкретной кодировки символов.
-Они используют методы буферизации внутри и, следовательно, потенциально намного эффективнее, чем потоки байтов.
Статья датируется 98 годом, но она по-прежнему действительна.
От Java - Primitive Data Types:
байт: Тип байт данных представляет собой 8-разрядное знаковое двоичное дополнение целое. Он имеет минимальное значение -128 и максимальное значение 127 (включительно).Тип данных байтов может быть полезен для , сохраняя память в больших массивах, где экономия памяти на самом деле имеет значение. Их также можно использовать вместо int , где их лимиты помогают уточнить ваш код; тот факт, что диапазон значений переменной ограничен, может быть формой документации.
char: Тип данных char - это один 16-разрядный символ Юникода. Он имеет минимальное значение '\ u0000' (или 0) и максимальное значение '\ uffff' (или 65535 включительно).
Один из них представляет собой последовательность байтов (двоичных данных), а другую - последовательность символов (текст). Байты и персонажи совершенно разные вещи (не верьте стандарту C, это ложь!). Вы можете конвертировать между ними, используя кодировку символов - это то, что, например, InputStreamReader
.
Далее материал для чтения: The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
InputStreams сделки на самом низком уровне с исходными данными. Читатели находятся на чуть более высоком уровне абстракции, имея дело с символами (которые в конечном счете кодируются в базовом потоке байтов)
Существует хороший обзор различий в различных InputStream, OutputStreams, Reader's и Writer здесь, как часть более крупной обучающей программы, охватывающей Java IO:
- 1. .Net Основной основной вопрос
- 2. основной mod_rewrite вопрос
- 3. Основной вопрос о WPF
- 4. Maven Основной вопрос
- 5. основной оракул вопрос
- 6. Основной вопрос выравнивания CSS
- 7. Основной вопрос MySQL PATH
- 8. Основной вопрос кеша
- 9. Основной вопрос о ООП
- 10. Основной вопрос php
- 11. Основной вопрос о намерениях?
- 12. Основной вопрос Oracle
- 13. цель C Основной вопрос
- 14. Основной вопрос CSS
- 15. C++ - основной вопрос Qt
- 16. A Основной вопрос Javascript
- 17. ява основной вопрос
- 18. Основной вопрос в C++
- 19. основной вопрос связи
- 20. Основной вопрос Php
- 21. Основной вопрос Android
- 22. JSF Основной вопрос: javax.servlet.ServletException
- 23. Основной вопрос о CMake
- 24. C++ - основной контейнер вопрос
- 25. Threejs основной вопрос оказания
- 26. Основной вопрос Telerik
- 27. Цель C - Основной вопрос?
- 28. Основной вопрос об интерфейсе
- 29. Понимание jQuery (основной вопрос)
- 30. Основной вопрос в php