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