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