ЧтениеДанных и ЗаписьДанных
Общая информация
Типы ПотокЧтения
и ПотокЗаписи
обеспечивают самый минимальный набор методов для работы с данными. В некоторых случаях необходимо получить более высокоуровневые механизмы работы с данными, например: прочитать или записать число, найти какой-либо маркер в данных и т. д. Для выполнения таких действий предназначены типы ЧтениеДанных
и ЗаписьДанных
. Рассмотрим эти типы более подробно.
Запись данных
Для записи данных предназначен тип ЗаписьДанных
. Экземпляр этого типа создается конструктором, параметрами которого выступают поток, в который будут записываться данные, и настройки записи данных. Настройки записи данных задаются с помощью типа НастройкиЗаписиДанных
, который позволяет управлять следующими настройками:
- В какой кодировке будут записываться данные в данном потоке (если в приемник данных пишется текстовая информация). Задается текстовым идентификатором кодировки. Свойство
Кодировка
. - Позволяет указать, каким образом в приемник данных будет записываться метка порядка байтов (также известная как BOM — Byte Order Mark). Данная настройка учитывается только в том случае, если для потока устанавливается кодировка
UTF-8
,UTF-16
илиUTF-32
. Для остальных кодировок данная настройка игнорируется. Задается в свойствеНастройкиЗаписиДанных.МеткаПорядкаБайтов
с помощью значения перечисленияМеткаПорядкаБайтов
. - Какой символ или их последовательность будет считаться разделителем строк (если в приемник данных пишется текстовая информация). Является строкой. Свойство
РазделительСтрок
. - Позволяет указать порядок следования байтов в словах: «младший-старший» (little endian) или «старший-младший» (big endian). Порядок следования байтов важен при записи многобайтовых данных (слов). Этот порядок может определяться архитектурой компьютера, на котором будут читаться данные, записываемые в поток, или этот порядок определяется самим форматом записываемых данных (например, форматом файла). Задается в свойстве
НастройкиЗаписиДанных.ПорядокБайтов
с помощью значения перечисленияПорядокБайтов
.
Тип ЗаписьДанных
позволяет выполнять следующие операции:
-
Записать один байт (число в интервале от 0 до 255 включительно). Используется метод
ЗаписатьБайт()
. -
Записать целое число. Поддерживаются 16-разрядные, 32-разрядные и 64-разрядные целые числа. При записи можно указать порядок байтов. Если порядок не указан, используется порядок байтов из настроек экземпляра
ЗаписьДанных
. Для записи чисел используются методыЗаписатьЦелое16()
,ЗаписатьЦелое32()
иЗаписатьЦелое64()
. -
Записать несколько символов или строку символов. Используются методы
ЗаписатьСимволы()
иЗаписатьСтроку()
. Разница заключается в том, что методЗаписатьСтроку()
после самой строки записывает в поток еще и разделитель строк. Если он не указан, то используется разделитель строк из настроек экземпляраЗаписьДанных
. Также оба метода позволяют задать кодировку записываемых данных. Если она не указана в методе, используется кодировка из настроек экземпляраЗаписьДанных
. -
Записать в поток двоичные данные. Двоичные данные могут быть представлены типом Байты или экземпляром типа
РезультатЧтенияДанных
, который возвращается в результате вызова методаЧтениеДанных.Прочитать()
илиЧтениеДанных.ПрочитатьДо()
. -
Записать в поток метку порядка байтов (BOM) для заданной кодировки с указанным порядком байтов. Используется статический метод
ЗаписатьМеткуПорядкаБайтов()
. Метод выбрасываетИсключениеНедопустимыйАргумент
, если указывается кодировка, отличная отUTF-8
,UTF-16
илиUTF-32
.
Чтение данных
Для чтения данных предназначен тип ЧтениеДанных
. Он создается конструктором, параметрами которого выступают поток, из которого будут читаться данные (источник данных), и настройки чтения данных. Настройки чтения данных задаются с помощью типа НастройкиЧтенияДанных
, который позволяет управлять следующими настройками:
- В какой кодировке будут читаться данные из этого потока (если из источника данных читается текстовая информация). Задается текстовым идентификатором кодировки. Свойство
Кодировка
. - Какой символ или их последовательность будет считаться разделителем строк (если из источника данных читается текстовая информация). Может быть простой строкой или массивом строк (если возможно использование нескольких разделителей строк). Свойство
РазделителиСтрок
. - Позволяет указать порядок следования байтов в словах: «младший-старший» ( little endian) или «старший-младший» ( big endian). Порядок следования байтов важен при записи многобайтовых данных (слов). Этот порядок может определяться архитектурой компьютера, на котором записывались данные, которые будут считываться из потока, или этот порядок определяется самим форматом читаемых данных (например, форматом файла). Задается с помощью значения типа
ПорядокБайтов
. СвойствоПорядокБайтов
.
ЧтениеДанных
позволяет выполня ть следующие операции:
-
Проверить, что в источнике данных есть данные. Если при очередном чтении было прочитано меньше данных, чем было запрошено, возвращает значение
Истина
. -
Прочитать один байт. Используется метод
ПрочитатьБайт()
. -
Прочитать целое число. Поддерживаются 16-разрядные, 32-разрядные и 64-разрядные целые числа. При чтении можно указать, с каким порядком байт будет считываться число. Если порядок не указан — будет использован порядок байт из настроек экземпляра
ЧтениеДанных
. Для чтения чисел используются методыПрочитатьЦелое16()
,ПрочитатьЦелое32()
иПрочитатьЦелое64()
. -
Прочитать несколько символов или строку символов. Используются методы
ПрочитатьСимволы()
иПрочитатьСтроку()
. Разница заключается в том, что методПрочитатьСтроку()
считывает поток до ближайшего разделителя строк, который указывается в качестве параметра метода или получается из настроек экземпляраЧтениеДанных
. МетодПрочитатьСимволы()
считает ровно то количество символов, которое указаны в параметре метода. В о боих методах имеется возможность указать кодировку считываемых данных. Если кодировка не указана в методе — будет использоваться кодировка из настроек экземпляра типаЧтениеДанных
. -
Передвинуть позицию чтения в потоке вперед на какое-то количество байт (с помощью метода
Пропустить()
) или до выбранного маркера (методПропуститьДо()
). Пр пропуске байт указывается — сколько байт надо пропустить. При пропуске до маркера — указывается один (в виде строки) или несколько (в виде массива) маркеров, по достижению которого (или одного из которых) пропуск прекращается. Для маркера можно указать используемую кодировку. -
Прочитать массив данных произвольного размера (с помощью метода
Прочитать()
). Метод вернет экземпляр типаРезультатЧтенияДанных
, который предназначен для хранения и обработки прочитанных данных. МетодПрочитатьДо()
отличается от методаПрочитать()
только тем, что методПрочитатьДо()
позволяет прочитать данные, размер которых заранее неизвестен. Но известен маркер, которым заканчивается текущая порция (или начинается след ующая).
Результат чтения данных
Экземпляр типа РезультатЧтенияДанных
получается при чтении данных из потока. Этот тип также может использоваться для записи данных в поток. Данный тип является закрываемым.
После получения значения данного типа, можно получить размер считанных данных (свойство Размер
). Если при чтении данных использовались маркер ы, то свойства МаркерНайден
и ИндексМаркера
, позволят узнать, что чтение было остановлено в результате нахождения маркера, а также понять, какой маркер был обнаружен.
Полученные данные можно использовать как источник для получения значения типа Байты
(метод ПолучитьБайты()
) или ПотокЧтения
(метод ОткрытьПотокДляЧтения()
). Каждый из этих методов можно вызывать многократно. До момента закрытия экземпляра, методы будут возвращать одинаковый результат.
Данные, которые считаны в экземпляр типа РезультатЧтенияДанных
, могут быть сохранены во временном файле на диске. Файл удаляется после вызова метода экземпляра Закрыть()
(явного или неявного).