0Pricing
Dart Academy · Урок

Потоковая обработка больших файлов

Обрабатывайте файлы по частям

«Потоковая обработка больших файлов» — бесплатный урок Dart Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Dart Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Dart Academy содержит 4 уроков всего.

Почему не прочитать всё сразу

readAsString загружает весь файл в память. Для огромного журнала или видео это может привести к сбою программы, поэтому вместо этого используйте потоковую обработку.

Открытие потока чтения

Вызовите openRead у объекта File, чтобы получить поток фрагментов байтов. Обрабатывайте каждый фрагмент и освобождайте уже обработанные.

final stream = File('big.log').openRead();

Обход фрагментов

Используйте await for, чтобы получать каждый фрагмент по мере его поступления. Потребление памяти остаётся постоянным независимо от размера файла.

await for (final chunk in stream) { use(chunk); }

Байты нужно декодировать

Каждый фрагмент содержит необработанные байты. Чтобы читать текст, пропустите поток через utf8.decoder и получите вместо этого фрагменты строк.

stream.transform(utf8.decoder);

Разделение на строки

Добавьте LineSplitter после декодера, и поток начнёт выдавать по одной аккуратной строке, готовой к обработке.

stream.transform(utf8.decoder).transform(LineSplitter());

Подсчёт строк без лишних затрат

Теперь подсчёт строк в файле размером в миллион строк выполняется легко и быстро. Увеличивайте счётчик внутри цикла, не удерживая весь файл в памяти.

var n = 0; await for (final l in lines) n++;

Открытие потока записи

Нужно записать большой объём данных? openWrite возвращает IOSink, в который можно постепенно передавать данные, записывая их на диск по мере работы.

final sink = File('out.txt').openWrite();

Передача данных в приёмник

Отправляйте текст с помощью sink.write или sink.writeln внутри цикла. Каждый вызов передаёт новые данные, не создавая заново гигантскую строку.

for (final row in rows) sink.writeln(row);

Всегда закрывайте приёмник

Завершив работу, вызовите close и дождитесь его выполнения. Это записывает последние байты и корректно освобождает дескриптор файла.

await sink.close();

Передача потока в приёмник

Чтобы эффективно скопировать файл, передайте поток чтения напрямую в приёмник записи с помощью pipe. Dart самостоятельно обрабатывает управление скоростью передачи данных.

await source.openRead().pipe(target.openWrite());

Обработка ошибок потока

Потоки могут завершиться с ошибкой в середине работы. Оберните цикл в try/catch, чтобы ошибка чтения незаметно не повредила результат.

try { await for (final c in stream) {} } catch (e) {}

Быстрая проверка

Вам нужно обработать журнал размером 5 ГБ на маломощном компьютере. Какой подход будет правильным?

Итоги

Теперь Вы умеете читать данные потоково с помощью openRead, декодировать их и разделять на строки, постепенно записывать через IOSink и использовать pipe для быстрого копирования.

Часто задаваемые вопросы

Урок «Потоковая обработка больших файлов» бесплатный?

Да — полный текст урока «Потоковая обработка больших файлов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Dart Academy, подпишись на CoddyKit PRO. Курс Dart Academy содержит 4 уроков всего.

Чему я научусь в уроке «Потоковая обработка больших файлов»?

Обрабатывайте файлы по частям Ты практикуешь Dart Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Dart Academy?

Предыдущий опыт не требуется. Dart Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Потоковая обработка больших файлов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Dart Academy?

Да. Каждый урок Dart Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Чтение и запись файлов
  2. Каталоги, пути и FileSystemEntity
  3. Потоковая обработка больших файлов
  4. Stdin, Stdout и аргументы процесса
← Назад к Dart Academy