2013-12-10 5 views
0

Я пытаюсь создать программу, которая позволяет мне получать имена из локального файла и добавлять их в массив имен String. Я не совсем понимаю разницу между потоками символов, бинарными потоками и потоками буферов, и поиск в Интернете не ответил на мой вопрос: какой тип потока я буду использовать для чтения из текстового файла, чтобы создать Строковый массив?Java - потоки символов и байтов

+0

Речь идет о том, как реализация потока будет угрожать входящим данным, например.вы сможете использовать данные в виде массива байтов или как одиночные символы (whitch не всегда один байт). В целом каждый поток в основном одинаковый. – Antoniossss

+0

Хм, тогда зачем людям когда-либо использовать байтовые потоки, если мы все будем использовать символы. AKA, откуда этот поток байтов? – bob

+0

Если вы не хотите использовать символы ... Если вы просто хотите читать/писать исходные/двоичные данные .. вы используете потоки байтов ... Проверьте .. 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

ответ

2

Я не совсем понимаю разницы между символьными потоками, потоками двоичными, и буфером потоков

Буфера красной сельдью здесь - это всего лишь деталь реализации, как правило, чтобы сделать вещи более эффективными. Важно понимать, читаете ли вы двоичные данные или текстовые данные. Если вы читаете текстовый файл, вы хотите получить описание Reader. Ваш файл содержит двоичные данные (все файлы в основном байты), и вам нужно сказать, как преобразовать их в текст. Вы могли использовать FileReader, но я бы предпочел использовать FileInputStream завернутые в InputStreamReader, а затем вы можете указать кодировку для преобразования между двоичной и текстом. Вам нужно знать кодировку вашего файла, например. UTF-8.

Любой InputStream возвращает только двоичные данные; и Reader возвращает текстовые данные.

В любом случае, если вы хотите построчно прочитать (неясно, что ваш массив будет состоять из) вы хотите BufferedReader обернуть InputStreamReader или FileReader, как предлагает способ readLine().

Хм, тогда зачем людям когда-либо использовать байтовые потоки, если мы все используем символы.

У нас нет. Файлы изображений, музыка, видео, сжатые данные, зашифрованные данные и т. Д. Не являются текстовыми данными. Если вы читаете файл изображения с Reader, вы почти потеряете некоторые данные.

Думайте о тексте как о другом формате - если вы пытались загрузить изображение, чтобы отобразить его, вам понадобится то, что понимает формат файла изображения; если вы пытались загрузить музыкальный файл, чтобы воспроизвести его, вам понадобится то, что понимает, что формат аудиофайла - с текстом, InputStreamReader понимает текст.

Несмотря на то, что во всех случаях у нас есть байты на уровне файла, класс, который вы используете, определяет, как интерпретируются эти байты.

+0

Большое спасибо! Это очень помогло – bob

1

Разница проста. В соответствии с этим tutorial

  1. Byte Streams ручки ввода/вывода необработанных двоичных данных.
  2. Character Streams обрабатывать ввод-вывод символьных данных, автоматически обрабатывая перевод в локальный набор символов и из него.
  3. Buffered Streams оптимизировать ввод и вывод, уменьшив количество вызовов в собственный API.
Смежные вопросы