Поток.СброситьБуферы

Методы · Flush

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

Синтаксис

СброситьБуферы()
Полное описание, параметры и ограничения

Поток.СброситьБуферы (Stream.Flush)

Поток (Stream)

СброситьБуферы (Flush)

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

Синтаксис:
СброситьБуферы()
Описание:

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

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

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер, интеграция.

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

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

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

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

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

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

Проверить сброс буферов без обещания записи readonly-потока

СбросБуферов не превращает readonly-доступ в записывающий. На собственных данных результат вызова диагностируем отдельно от доступности записи.

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

Серверная процедура учебной базы; собственные двоичные данные в памяти, без файлов.

Подготовка

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

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

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

Данные = ПолучитьДвоичныеДанныеИзСтроки("ABC123", КодировкаТекста.UTF8, Ложь);
Поток = Данные.ОткрытьПотокДляЧтения();
Вид = Неопределено;
Копия = Неопределено;
Попытка
    Сообщить(Не Поток.ДоступнаЗапись);
    ПозицияДо = Поток.ТекущаяПозиция();
    Попытка
        Поток.СброситьБуферы();
        Сообщить("Сброс буферов завершён для этого потока");
    Исключение
        Сообщить("Сброс недоступен этому readonly-потоку: " + ОписаниеОшибки());
    КонецПопытки;
    Сообщить(Не Поток.ДоступнаЗапись);
    Сообщить(Поток.ТекущаяПозиция() = ПозицияДо);
    Сообщить(Поток.Размер() = 6);
Исключение
    Если Вид <> Неопределено Тогда
        Вид.Закрыть();
    КонецЕсли;
    Если Копия <> Неопределено Тогда
        Копия.Закрыть();
    КонецЕсли;
    Поток.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Если Вид <> Неопределено Тогда
    Вид.Закрыть();
КонецЕсли;
Если Копия <> Неопределено Тогда
    Копия.Закрыть();
КонецЕсли;
Поток.Закрыть();

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

  1. Читаем признак записи до вызова и сохраняем текущую позицию.

  2. Сброс может быть бессмысленной операцией для источника в памяти; завершение/ограничение показываем разными сообщениями.

  3. Независимо от разрешённого исхода сброса readonly-поток не получает право записи и не изменяет шесть исходных байтов.

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

  1. Четыре сравнения Истина: readonly до/после, прежняя позиция и размер 6.

  2. При отказе выводится реальная ошибка; такой исход не назван успешным сбросом.

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

Разделены завершение буферизации и возможность изменения данных.

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

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

  2. Справка описывает общую операцию, но не обещает записывающий буфер у любого конкретного readonly-источника.

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

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

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

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

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