Прочитать байты из потока в БуферДвоичныхДанных.
Синтаксис
ПрочитатьВБуферДвоичныхДанных(<Количество>)ПрочитатьВБуферДвоичныхДанных(<Буфер>, <ПозицияВБуфере>, <Количество>)Полное описание, параметры и ограничения
ЧтениеДанных.ПрочитатьВБуферДвоичныхДанных (DataReader.ReadIntoBinaryDataBuffer)
ЧтениеДанных (DataReader)
ПрочитатьВБуферДвоичныхДанных (ReadIntoBinaryDataBuffer)
Доступен, начиная с версии 8.3.9.
Вариант синтаксиса: Чтение в новый буфер
Синтаксис:
ПрочитатьВБуферДвоичныхДанных(<Количество>)
Параметры:
<Количество> (необязательный)
Тип: Число.
Количество байтов, которые требуется прочитать. Если не задано, то выполняется чтение всех байтов до конца потока.
Значение по умолчанию: Неопределено.
Описание варианта метода:
Прочитать заданное количество байтов в новый БуферДвоичныхДанных.
При этом будет возвращен экземпляр БуферДвоичныхДанных, содержащий прочитанные байты.
Вариант синтаксиса: Чтение в существующий буфер
Синтаксис:
ПрочитатьВБуферДвоичныхДанных(<Буфер>, <ПозицияВБуфере>, <Количество>)
Параметры:
<Буфер> (обязательный)
Тип: БуферДвоичныхДанных.
Буфер двоичных данных, в который требуется поместить прочитанные байты.
<ПозицияВБуфере> (обязательный)
Тип: Число.
Позиция в буфере, начиная с которой требуется записать прочитанные данные.
<Количество> (обязательный)
Тип: Число.
Количество байтов, которые требуется прочитать.
Описание варианта метода:
Прочитать из потока заданное количество байтов и поместить в заданный буфер, начиная с заданной позиции.
Возвращается число фактически прочитанных байтов.
Возвращаемое значение:
Тип: БуферДвоичныхДанных.
Описание:
Прочитать байты из потока в БуферДвоичныхДанных.
Доступность:
Тонкий клиент, сервер, толстый клиент, внешнее соединение.
См. также:
ЧтениеДанных, метод НачатьЧтениеВБуферДвоичныхДанных
ЧтениеДанных, метод ПрочитатьВБуферДвоичныхДанныхАсинх
Использование в версии:
Доступен, начиная с версии 8.3.9.
Описание изменено в версии 8.3.18.
Методическая информация
Практические примеры
Прочитать данные в новый буфер и в часть заранее выделенного буфера
Два варианта одного метода возвращают разные результаты: новый буфер либо фактическое число записанных в существующий буфер байтов.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Используйте отдельную учебную базу. Фрагмент без директив вставьте в тело серверной процедуры ВыполнитьПример() Экспорт общего модуля УчебныеЗадачи.
Все исходные байты создаются самим примером в памяти. Файлы, сеть, справочники и документы не нужны.
Запускайте задачи отдельно. После закрытия ЧтениеДанных/ЗаписьДанных не используйте этот экземпляр повторно.
Данные = ПолучитьДвоичныеДанныеИзСтроки("ABCDE", КодировкаТекста.UTF8, Ложь);
Чтение = Новый ЧтениеДанных(Данные, КодировкаТекста.UTF8);
Попытка
Начало = Чтение.ПрочитатьВБуферДвоичныхДанных(2);
Сообщить(Начало.Размер = 2);
Сообщить(ПолучитьСтрокуИзБуфераДвоичныхДанных(Начало, КодировкаТекста.UTF8) = "AB");
Буфер = Новый БуферДвоичныхДанных(6);
Для Индекс = 0 По Буфер.Размер - 1 Цикл
Буфер.Установить(Индекс, 46);
КонецЦикла;
Прочитано = Чтение.ПрочитатьВБуферДвоичныхДанных(Буфер, 1, 4);
Сообщить(Прочитано = 3);
Сообщить(Буфер.Размер = 6);
Сообщить(ПолучитьСтрокуИзБуфераДвоичныхДанных(Буфер, КодировкаТекста.UTF8) = ".CDE..");
Сообщить(Чтение.ЧтениеЗавершено);
Исключение
Чтение.Закрыть();
ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();Разбор по шагам
Первый вариант с числом 2 создаёт новый БуферДвоичныхДанных с байтами AB.
Шестибайтный буфер заранее заполняем точками (ASCII-код 46). Это делает незаполненную область видимой.
Второй вариант передаёт объект буфера, начальную позицию 1 и запрошенное количество 4. Буфер не расширяется автоматически.
В источнике осталось только CDE, поэтому результат второго вызова — число 3. Не трактуйте это число как новый буфер.
Запрошено 4, прочитано 3: установлен флаг завершения. Позиции 0, 4 и 5 остаются точками.
Как проверить результат
Результат первого вызова AB; итоговый существующий буфер .CDE..; его размер остаётся 6.
Фактически прочитано 3, а не 4; все шесть сравнений Истина.
Ожидаемый результат
Разобраны обе перегрузки и безопасное частичное чтение в существующий буфер.
На что обратить внимание
Позиция 1 — второй байт, индексы начинаются с нуля.
Не используйте непрочитанный хвост как новые данные: там остаются прежние байты буфера.
ASCII выбран намеренно. Байтовая порция произвольной длины может разрезать русскую букву UTF-8.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.