java tutorial - Руководство Java IO Character Streams - учебник java - java programming - учиться java - java basics - java for beginners
Введение
- В предыдущем руководстве я ознакомил вас с входным-выходным потоком (input-output binary stream), вам нужно понять о нем перед тем как изучать про входной-выходной символьный поток (input-output character stream), вы можете посмотреть по ссылке:
Разница между бинарным потоком и символьным потоком
- Бинарный поток (binary stream), каждый раз читает/записывает 1 byte (Равный 8 bit)
java - джава - учиться java - учебник java -
поток символов
- примеры java - java-программы
- При этом, символьный поток (character stream) каждый раз читает/записывает один символ, в зависимости от кодирования (encoding) ( UTF-8, UTF-16,..) где этот символ будет равен 1, 2 или 3 byte. Посмотрим на иллюстрированное изображение ниже:
UTF-16:
- Это текст на японском, если сохраниться в файле с кодированием UTF-16 (UTF-16 encoding), то byte в жестком диске будут похожи как в изображении ниже:
- Два первых byte (254,255) только означают оповещение о начале новой строки с кодом UTF-16.
- Следующие символы будут кодированы с помощью 2 byte.
- Например символ 'J' кодирован с помощью 2 byte (0 и 74)
- Символ 'P' кодирован с помощью 2 byte (0 и 80)
- ....
- При чтении из файла по кодированию UTF-16, он пропустит первые 2 byte, и прочитает последовательные 2 byte соединенные в один символ.
java - джава - учиться java - учебник java -
Java строки utf
- примеры java - java-программы
UTF-8:
- Тот же текст на японском выше при записи в файл с кодированием UTF-8 будет другим, посмотрим byte сохраненные на жестком диске:
- С символами ASCII, используется только 1 byte для хранения.
- Например, он использует 1 byte для хранения символа 'J' (74).
- Используется 1 byte для хранения символа 'P' (80).
- Для хранения других символов может использовать 2 byte или 3 byte.
- Правило для чтения 1 символа, основываясь на таблице кода UTF-8 (UTF-8 Table).
- Читает первый byte, если <= 127, то это 1 символ ASCII.
- Напротив если > 127, то нужно прочитать дальше второй byte, и проверить можно эти 2 byte соединить в 1 символ основывая на таблице кода UTF-8 или нет.
- Если первые 2 byte не соответствуют одному символу, он читает дальше третий byte и соединяет в 1 символ.
- UTF-8 использует максимум 3 byte для хранения одного символа.
java - джава - учиться java - учебник java -
utf8 строки java
- примеры java - java-программы
Обзор символьных потоков
Иерархия классов:
Class java.io.Reader
- Reader являет абстрактным классом, это базовый класс для сивольных потоков чтения.Создать файл test_reader.txt чтобы начать пример с Reader:
java - джава - учиться java - учебник java -
Иерархия классов
- примеры java - java-программы
java - джава - учиться java - учебник java -
читатель класса java
- примеры java - java-программы
HelloReader.java
- Результат запуска примера:
java - джава - учиться java - учебник java -
java Привет читатель
- примеры java - java-программы
- Следующий пример прочитает много символов за один раз. Этот способ увеличивает эффективность программы по сравнению с поочередным чтением каждого символа.
HelloReader2.java
Class java.io.Writer
- Writer это абстрактный класс, являющийся базой символьного потока для записи.
HelloWriter.java
- Результаты запуска примера:
java - джава - учиться java - учебник java -
класс java писатель
- примеры java - java-программы
- Следующий пример это записать много символов в поток за один раз. Точнее записать массив символов в поток. Это повышает эффективность программы по сравнению с поочередной записью каждого символа.
HelloWriter2.java
- Результаты запуска примера:
java - джава - учиться java - учебник java -
класс java писатель вывода
- примеры java - java-программы
Как конвертировать бинарный поток в символьный поток?
- У вас есть бинарный поток (binary stream). И вы хотите конвертировать его в символьный поток (character stream)?
java - джава - учиться java - учебник java -
двоичный поток
- примеры java - java-программы
- В примерах выше мы ознакомились с Reader, Writer. Следующий пример позволяет вам прочитать и написать данные в поток с опредленным кодом.Создать файл test_utf8.txt
java - джава - учиться java - учебник java -
Создание файла теста
- примеры java - java-программы
- При Save, Eclipse спросит вас с каким кодированием вы хотите сохранить, выберите UTF-8.
java - джава - учиться java - учебник java -
сохранение проблемы
- примеры java - java-программы
InputStreamReaderExample.java
- Результаты запуска примера
java - джава - учиться java - учебник java -
Пример чтения входного потока
- примеры java - java-программы
- Следующий пример записывает файл с определенным кодированием UTF-8.
OutputStreamWriterExample.java
- Результаты запуска примера
java - джава - учиться java - учебник java -
входной поток чтения вывода
- примеры java - java-программы
Class java.io.BufferedReader
- Если вы хотите прочитать данные текстового файла. BufferedReader является хорошим выбором.
java - джава - учиться java - учебник java -
входно поок чтения вывода
- примеры java - java-программы
java - джава - учиться java - учебник java -
тестирование нескольких линий
- примеры java - java-программы
test_multi_lines.txt
BufferedReaderExample.java
Результаты запуска примера:
java - джава - учиться java - учебник java -
Пример чтения буфера
- примеры java - java-программы
Class java.io.BufferedWriter
- BufferedWriter это прямой подкласс Writer.