Я пытаюсь создать программу, которая позволяет мне получать имена из локального файла и добавлять их в массив имен String. Я не совсем понимаю разницу между потоками символов, бинарными потоками и потоками буферов, и поиск в Интернете не ответил на мой вопрос: какой тип потока я буду использовать для чтения из текстового файла, чтобы создать Строковый массив?Java - потоки символов и байтов
ответ
Я не совсем понимаю разницы между символьными потоками, потоками двоичными, и буфером потоков
Буфера красной сельдью здесь - это всего лишь деталь реализации, как правило, чтобы сделать вещи более эффективными. Важно понимать, читаете ли вы двоичные данные или текстовые данные. Если вы читаете текстовый файл, вы хотите получить описание Reader
. Ваш файл содержит двоичные данные (все файлы в основном байты), и вам нужно сказать, как преобразовать их в текст. Вы могли использовать FileReader
, но я бы предпочел использовать FileInputStream
завернутые в InputStreamReader
, а затем вы можете указать кодировку для преобразования между двоичной и текстом. Вам нужно знать кодировку вашего файла, например. UTF-8.
Любой InputStream
возвращает только двоичные данные; и Reader
возвращает текстовые данные.
В любом случае, если вы хотите построчно прочитать (неясно, что ваш массив будет состоять из) вы хотите BufferedReader
обернуть InputStreamReader
или FileReader
, как предлагает способ readLine()
.
Хм, тогда зачем людям когда-либо использовать байтовые потоки, если мы все используем символы.
У нас нет. Файлы изображений, музыка, видео, сжатые данные, зашифрованные данные и т. Д. Не являются текстовыми данными. Если вы читаете файл изображения с Reader
, вы почти потеряете некоторые данные.
Думайте о тексте как о другом формате - если вы пытались загрузить изображение, чтобы отобразить его, вам понадобится то, что понимает формат файла изображения; если вы пытались загрузить музыкальный файл, чтобы воспроизвести его, вам понадобится то, что понимает, что формат аудиофайла - с текстом, InputStreamReader
понимает текст.
Несмотря на то, что во всех случаях у нас есть байты на уровне файла, класс, который вы используете, определяет, как интерпретируются эти байты.
Большое спасибо! Это очень помогло – bob
Разница проста. В соответствии с этим tutorial
- Byte Streams ручки ввода/вывода необработанных двоичных данных.
- Character Streams обрабатывать ввод-вывод символьных данных, автоматически обрабатывая перевод в локальный набор символов и из него.
- Buffered Streams оптимизировать ввод и вывод, уменьшив количество вызовов в собственный API.
- 1. Java-байты-потоки и потоки символы
- 2. поток байтов и поток символов
- 3. Java 8 Потоки уникальных символов из массива
- 4. Должен ли я использовать потоки байтов или потоки символов для обработки сообщений HTTP?
- 5. C# потоки байтов через TCP
- 6. Java - поток байтов против потока символов?
- 7. Java Потоки и System.in
- 8. Java-итераторы и потоки
- 9. Java-сокеты и потоки
- 10. Java-потоки и синхронизация
- 11. кодирование и декодирование символов и байтов буфера
- 12. Как управлять потоками байтов и когда закрывать потоки
- 13. Как преобразовать список символов и байтов в список чистых байтов?
- 14. Массив символов против массива байтов
- 15. Преобразование байтов в массив символов - и обратно
- 16. Чтение байтов (символов) из буфера
- 17. Java: многопоточные и 2D-потоки
- 18. Программирование и потоки Java-сокетов
- 19. Java потоки и сборщик мусора
- 20. Java EE и фоновые потоки
- 21. Java 8 Лямбда и потоки
- 22. Потоки и синхронизация в Java
- 23. Потоки Java и прерывания потоков
- 24. Java-потоки и дилемма JTabbedPane
- 25. Java-исполнитель и долгоживущие потоки
- 26. Удаление символов NUL из байтов
- 27. Можно ли преобразовать потоки Char в потоки Byte в Java?
- 28. OCaml разбиение байтов против символов
- 29. Потоки Java и потоки POSIX, уровень пользователя или ядра?
- 30. Java-потоки: как потоки возвращают значения
Речь идет о том, как реализация потока будет угрожать входящим данным, например.вы сможете использовать данные в виде массива байтов или как одиночные символы (whitch не всегда один байт). В целом каждый поток в основном одинаковый. – Antoniossss
Хм, тогда зачем людям когда-либо использовать байтовые потоки, если мы все будем использовать символы. AKA, откуда этот поток байтов? – bob
Если вы не хотите использовать символы ... Если вы просто хотите читать/писать исходные/двоичные данные .. вы используете потоки байтов ... Проверьте .. http://docs.oracle.com/javase/tutorial/i18n /text/stream.html http://stackoverflow.com/questions/8431787/whats-the-difference-between-character-stream-and-byte-stream – TheLostMind