БуферДвоичныхДанных.Записать

Методы · Write

Заменить значения, начиная с заданной позиции, значениями из заданного буфера.

Синтаксис

Записать(<Позиция>, <Байты>, <Количество>)
Полное описание, параметры и ограничения

БуферДвоичныхДанных.Записать (BinaryDataBuffer.Write)

БуферДвоичныхДанных (BinaryDataBuffer)

Записать (Write)

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

Синтаксис:
Записать(<Позиция>, <Байты>, <Количество>)
Параметры:

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

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

<Количество> (необязательный)
Тип: Число.
Количество байт, которые требуется заменить.
Описание:

Заменить значения, начиная с заданной позиции, значениями из заданного буфера.

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

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

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

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

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

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

Отличить общий срез буфера от независимой копии

ПолучитьСрез использует часть исходных байтов. Прочитать и Скопировать дают отдельные данные. Это важно перед изменением пакета.

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

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

Подготовка

  1. Серверный контекст. Исходные байты: 1, 2, 3, 4.

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

Буфер = Новый БуферДвоичныхДанных(4);
Для Позиция = 0 По 3 Цикл
    Буфер.Установить(Позиция, Позиция + 1);
КонецЦикла;
Срез = Буфер.ПолучитьСрез(1, 2);
КопияЧасти = Буфер.Прочитать(1, 2);
КопияВсего = Буфер.Скопировать();
Срез.Установить(0, 99);
Сообщить(Буфер.Получить(1));
Сообщить(КопияЧасти.Получить(0));
Сообщить(КопияВсего.Получить(1));
Перевёрнутый = КопияВсего.Перевернуть();
Сообщить(Перевёрнутый.Получить(0));
Сообщить(КопияВсего.Получить(0));
Объединённый = КопияЧасти.Соединить(Перевёрнутый);
Сообщить(Объединённый.Размер);
Назначение = Новый БуферДвоичныхДанных(4);
Назначение.Записать(1, КопияЧасти, 2);
Сообщить(Назначение.Получить(1));
КопияВсего.УстановитьТолькоЧтение();
Сообщить(КопияВсего.ТолькоЧтение);
Попытка
    КопияВсего.Установить(0, 100);
Исключение
    Сообщить("Изменение запрещено: буфер только для чтения");
КонецПопытки;
Сообщить(КопияВсего.Получить(0));

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

  1. Создаём срез двух байтов с позиции 1 и независимые копии.

  2. Изменение первого байта среза меняет второй байт исходного буфера, но не прежние копии.

  3. Перевернуть возвращает новый буфер; Соединить собирает два буфера в один.

  4. Записать помещает копию части в заданную позицию другого буфера; режим ТолькоЧтение запрещает дальнейшие изменения снимка.

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

  1. После изменения среза значения: исходный байт 99, в обеих копиях соответствующий байт 2.

  2. Перевёрнутый первый байт 4, исходный первый байт копии 1; длина объединения 6.

  3. После попытки изменения снимка его первый байт остаётся 1.

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

Общие байты и независимые снимки различены; снимок защищён от записи.

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

  1. Срез не используйте как неизменяемый снимок: изменение исходного буфера отражается в срезе.

  2. ТолькоЧтение — защита объекта от изменения, а не шифрование и не ограничение чтения содержимого.

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

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

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

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

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