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