Пожалуйста, объясните байтовые потоки и файлы потока символов. Что именно это означает, является ли документ Microsoft Word ориентированным по значению или символом?
Спасибо
Пожалуйста, объясните байтовые потоки и файлы потока символов. Что именно это означает, является ли документ Microsoft Word ориентированным по значению или символом?
Спасибо
Поток - это способ последовательного доступа к файлу. Поток байта доступа к байту файла байтом. Поток байтов подходит для любого типа файлов, однако не совсем подходит для текстовых файлов. Например, если файл использует кодировку Unicode, а символ представлен двумя байтами, поток байтов будет обрабатывать их отдельно, и вам нужно будет сделать преобразование самостоятельно.
Поток символов будет читать символ файла по символу. Для корректной работы символьного потока необходимо предоставить кодировку файла.
Хотя документ Microsoft Word содержит текст, к нему нельзя получить доступ с символьным потоком (это не текстовый файл). Для доступа к нему необходимо использовать поток байтов.
ByteStreams
На странице документации оракала потоки байтов:
Программы используют байтовые потоки для выполнения ввода и вывода 8-битных байтов. Все классы потока байтов происходят от
InputStream
иOutputStream
.
Когда использовать:
Байт-потоки должны использоваться только для самого примитивного ввода-вывода
Когда не использовать:
Вы не должны использовать поток байтов для чтения потоков символов
например. Чтобы прочитать текстовый файл
Потоки символов:
Из страницы документации оракула о символьных потоках:
Java-платформа хранит значения символов, используя соглашения Unicode. Поток ввода символов автоматически преобразует этот внутренний формат в локальный набор символов и из него.
Все классы потока символов происходят от Reader
и Writer
.
Потоки символов часто являются "обертки" для потоков байтов. Поток символов использует поток байтов для выполнения физического ввода-вывода, тогда как поток символов обрабатывает перевод между символами и байтами.
Существует два потока "моста" общего назначения: "t24 > и OutputStreamWriter
.
Когда использовать:
Чтобы прочитать потоки символов либо из Socket
, либо File
символов
В резюме:
Байт-поток читает и записывает байт за раз. Мы должны избегать использования потока байтов при работе с более сложными данными.
Поток символов и другие доступные потоки должны использоваться для обработки сложных данных.
Прочитайте this. Он рассказывает вам о различии между байтами и символами (а также множеством других полезных материалов)
1. Ориентированные на объект привязываются к типу данных. С его помощью можно считывать только тип строки или тип символа, в то время как ориентированные по байтам не привязаны к какому-либо типу данных, данные любого типа данных могут быть прочитаны (кроме строки), просто вы должны указать его.
2. Ориентированный на символ символ читает символ символом, тогда как байт-ориентированный читает байт байтом
3. Конкретные ориентированные потоки используют схему кодирования символов (UNICODE), в то время как байт-ориентированный не использует какую-либо схему кодирования
4. Конкретные ориентированные потоки также известны как потоки чтения и записи Байт-ориентированные потоки известны как потоки данных: входной поток данных и выходной поток данных
Поток символов будет читать символ файла по символу. Потоки символов способны читать 16-битные символы (байтовые потоки считывают 8-битные символы). Потоки символов способны переводить неявно 8-битные данные в 16-разрядные данные или наоборот. Поток символов может поддерживать все типы наборов символов ASCII, Unicode, UTF-8, UTF-16 и т.д. Но поток байтов подходит только для набора символов ASCII. Java-платформа хранит значения символов, используя соглашения Unicode. Поток ввода символов автоматически преобразует этот внутренний формат в локальный набор символов и из него.
Если вы не работаете с двоичными данными, такими как изображения и звуковые файлы, вы должны использовать читателей и писателей для чтения и записи информации с символьными потоками.