После чтения трёхбайтового заголовка HDR копируем BODY. КопироватьВ не начинает чтение заново.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Используйте отдельную учебную базу. Фрагмент без директив вставьте в тело серверной процедуры ВыполнитьПример() Экспорт общего модуля УчебныеЗадачи.
Все исходные байты создаются самим примером в памяти. Файлы, сеть, справочники и документы не нужны.
Запускайте задачи отдельно. После закрытия ЧтениеДанных/ЗаписьДанных не используйте этот экземпляр повторно.
Данные = ПолучитьДвоичныеДанныеИзСтроки("HDRBODY", КодировкаТекста.UTF8, Ложь);
Исходный = Данные.ОткрытьПотокДляЧтения();
Чтение = Новый ЧтениеДанных(Исходный);
Целевой = Новый ПотокВПамяти;
Попытка
Сообщить(Чтение.ИсходныйПоток() = Исходный);
Сообщить(Чтение.ПрочитатьСимволы(3) = "HDR");
Скопировано = Чтение.КопироватьВ(Целевой);
Сообщить(Скопировано = 4);
Исключение
Чтение.Закрыть();
Исходный.Закрыть();
Целевой.Закрыть();
ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();
Исходный.Закрыть();
Тело = Целевой.ЗакрытьИПолучитьДвоичныеДанные();
Сообщить(Тело.Размер() = 4);
Сообщить(ПолучитьСтрокуИзДвоичныхДанных(Тело, КодировкаТекста.UTF8) = "BODY");Разбор по шагам
Явно открываем исходный поток из собственных ДвоичныеДанные и передаём его оболочке чтения.
ИсходныйПоток возвращает переданный поток; это метод, а не свойство без скобок.
Три символа HDR уже прочитаны. КопироватьВ переносит оставшиеся четыре байта, возвращая фактическое количество.
Сначала закрываем ЧтениеДанных, затем исходный поток, которым владеет наш код.
Получаем результат из целевого потока после копирования и проверяем, что заголовка в нём нет.
Как проверить результат
Скопировано ровно четыре байта; результат BODY, а не HDRBODY.
Все пять сравнений Истина; оба потока закрываются и при исключении.
Ожидаемый результат
Скопирован непрочитанный остаток с явным управлением временем жизни потоков.
На что обратить внимание
Не перемещайте вложенный ИсходныйПоток напрямую во время работы оболочки: у неё может быть буфер чтения.
Закрытие оболочки не закрывает отдельно созданный переданный поток автоматически. Закрываем его сами.
Для реального большого файла копирование лучше выполнять без полного чтения исходных данных в память. Здесь память выбрана для безопасной подготовки.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.