ЧтениеДанных.ПрочитатьВБуферДвоичныхДанных

Методы · ReadIntoBinaryDataBuffer

Прочитать байты из потока в БуферДвоичныхДанных.

Синтаксис

ПрочитатьВБуферДвоичныхДанных(<Количество>)
ПрочитатьВБуферДвоичныхДанных(<Буфер>, <ПозицияВБуфере>, <Количество>)
Полное описание, параметры и ограничения

ЧтениеДанных.ПрочитатьВБуферДвоичныхДанных (DataReader.ReadIntoBinaryDataBuffer)

ЧтениеДанных (DataReader)

ПрочитатьВБуферДвоичныхДанных (ReadIntoBinaryDataBuffer)

Доступен, начиная с версии 8.3.9.

Вариант синтаксиса: Чтение в новый буфер

Синтаксис:
ПрочитатьВБуферДвоичныхДанных(<Количество>)
Параметры:

<Количество> (необязательный)
Тип: Число.
Количество байтов, которые требуется прочитать. Если не задано, то выполняется чтение всех байтов до конца потока.
Значение по умолчанию: Неопределено.
Описание варианта метода:
Прочитать заданное количество байтов в новый БуферДвоичныхДанных.
При этом будет возвращен экземпляр БуферДвоичныхДанных, содержащий прочитанные байты.
Вариант синтаксиса: Чтение в существующий буфер

Синтаксис:
ПрочитатьВБуферДвоичныхДанных(<Буфер>, <ПозицияВБуфере>, <Количество>)
Параметры:

<Буфер> (обязательный)
Тип: БуферДвоичныхДанных.
Буфер двоичных данных, в который требуется поместить прочитанные байты.

<ПозицияВБуфере> (обязательный)
Тип: Число.
Позиция в буфере, начиная с которой требуется записать прочитанные данные.

<Количество> (обязательный)
Тип: Число.
Количество байтов, которые требуется прочитать.
Описание варианта метода:
Прочитать из потока заданное количество байтов и поместить в заданный буфер, начиная с заданной позиции.
Возвращается число фактически прочитанных байтов.
Возвращаемое значение:
Тип: БуферДвоичныхДанных.

Описание:

Прочитать байты из потока в БуферДвоичныхДанных.

Доступность:

Тонкий клиент, сервер, толстый клиент, внешнее соединение.

См. также:
ЧтениеДанных, метод НачатьЧтениеВБуферДвоичныхДанных
ЧтениеДанных, метод ПрочитатьВБуферДвоичныхДанныхАсинх

Использование в версии:

Доступен, начиная с версии 8.3.9.

Описание изменено в версии 8.3.18.

Методическая информация

Практические примеры

Прочитать данные в новый буфер и в часть заранее выделенного буфера

Два варианта одного метода возвращают разные результаты: новый буфер либо фактическое число записанных в существующий буфер байтов.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Используйте отдельную учебную базу. Фрагмент без директив вставьте в тело серверной процедуры ВыполнитьПример() Экспорт общего модуля УчебныеЗадачи.

  2. Все исходные байты создаются самим примером в памяти. Файлы, сеть, справочники и документы не нужны.

  3. Запускайте задачи отдельно. После закрытия ЧтениеДанных/ЗаписьДанных не используйте этот экземпляр повторно.

Данные = ПолучитьДвоичныеДанныеИзСтроки("ABCDE", КодировкаТекста.UTF8, Ложь);
Чтение = Новый ЧтениеДанных(Данные, КодировкаТекста.UTF8);
Попытка
    Начало = Чтение.ПрочитатьВБуферДвоичныхДанных(2);
    Сообщить(Начало.Размер = 2);
    Сообщить(ПолучитьСтрокуИзБуфераДвоичныхДанных(Начало, КодировкаТекста.UTF8) = "AB");
    Буфер = Новый БуферДвоичныхДанных(6);
    Для Индекс = 0 По Буфер.Размер - 1 Цикл
        Буфер.Установить(Индекс, 46);
    КонецЦикла;
    Прочитано = Чтение.ПрочитатьВБуферДвоичныхДанных(Буфер, 1, 4);
    Сообщить(Прочитано = 3);
    Сообщить(Буфер.Размер = 6);
    Сообщить(ПолучитьСтрокуИзБуфераДвоичныхДанных(Буфер, КодировкаТекста.UTF8) = ".CDE..");
    Сообщить(Чтение.ЧтениеЗавершено);
Исключение
    Чтение.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();

Разбор по шагам

  1. Первый вариант с числом 2 создаёт новый БуферДвоичныхДанных с байтами AB.

  2. Шестибайтный буфер заранее заполняем точками (ASCII-код 46). Это делает незаполненную область видимой.

  3. Второй вариант передаёт объект буфера, начальную позицию 1 и запрошенное количество 4. Буфер не расширяется автоматически.

  4. В источнике осталось только CDE, поэтому результат второго вызова — число 3. Не трактуйте это число как новый буфер.

  5. Запрошено 4, прочитано 3: установлен флаг завершения. Позиции 0, 4 и 5 остаются точками.

Как проверить результат

  1. Результат первого вызова AB; итоговый существующий буфер .CDE..; его размер остаётся 6.

  2. Фактически прочитано 3, а не 4; все шесть сравнений Истина.

Ожидаемый результат

Разобраны обе перегрузки и безопасное частичное чтение в существующий буфер.

На что обратить внимание

  1. Позиция 1 — второй байт, индексы начинаются с нуля.

  2. Не используйте непрочитанный хвост как новые данные: там остаются прежние байты буфера.

  3. ASCII выбран намеренно. Байтовая порция произвольной длины может разрезать русскую букву UTF-8.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.