Dart Academy · Aula

Transmissão de Arquivos Grandes

Processe arquivos em partes.

Aula 3 de 413 etapas

Transmissão de Arquivos Grandes é uma aula grátis de Dart Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Dart Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Dart Academy inclui 4 aulas no total.

Por que não ler tudo

readAsString carrega o arquivo inteiro na memória. Para um registro muito grande ou um vídeo, isso pode travar o programa; por isso, use stream.

Abrir um fluxo de leitura

Chame openRead em um arquivo para obter um stream de blocos de bytes. Processe cada bloco e descarte os anteriores.

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

Percorrer os blocos

Use await for para receber cada bloco à medida que chega. A memória permanece estável, independentemente do tamanho que o arquivo alcance.

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

Bytes precisam ser decodificados

Cada bloco contém bytes brutos. Para ler texto, passe o stream por utf8.decoder para obter partes de String.

stream.transform(utf8.decoder);

Dividir em linhas

Encadeie LineSplitter depois do decodificador, e o stream emitirá uma linha organizada por vez, pronta para ser processada.

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

Contar linhas com baixo custo

Agora, contar as linhas de um arquivo com um milhão de linhas é simples e leve. Incremente um contador dentro do loop, sem nunca manter o arquivo inteiro na memória.

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

Abrir um fluxo de escrita

Precisa escrever uma saída grande? openWrite retorna um IOSink ao qual você fornece dados gradualmente, gravando-os no disco à medida que avança.

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

Alimentar o sink

Envie texto com sink.write ou sink.writeln dentro de um loop. Cada chamada transmite mais dados sem reconstruir uma String gigantesca.

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

Sempre fechar o sink

Quando terminar, chame close e aguarde sua conclusão. Isso libera os últimos bytes e libera o identificador do arquivo corretamente.

await sink.close();

Passar o stream para o sink

Para copiar um arquivo com eficiência, use pipe para direcionar um stream de leitura diretamente a um sink de escrita. O Dart gerencia o controle de fluxo para você.

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

Tratar erros do stream

Os streams podem falhar no meio do fluxo. Envolva o loop em try/catch para que um erro de leitura não corrompa seus resultados silenciosamente.

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

Verificação rápida

Você precisa processar um registro de 5 GB em uma máquina pequena. Qual é a abordagem correta?

Recapitulação

Agora você sabe fazer leituras por stream com openRead, decodificar e dividir em linhas, escrever gradualmente por meio de um IOSink e usar pipe para cópias rápidas.

Grátis para começar

Aprenda Dart com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
30
Aulas
120

Perguntas Frequentes

A aula “Transmissão de Arquivos Grandes” é grátis?

Sim — o texto completo de “Transmissão de Arquivos Grandes” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Dart Academy, atualize para CoddyKit PRO. O curso de Dart Academy inclui 4 aulas no total.

O que vou aprender em “Transmissão de Arquivos Grandes”?

Processe arquivos em partes. Você pratica Dart Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Dart Academy?

Nenhuma experiência prévia é necessária. Dart Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Transmissão de Arquivos Grandes”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Dart Academy?

Sim. Cada aula de Dart Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Leitura e Gravação de Arquivos
  2. Diretórios, Caminhos e FileSystemEntity
  3. Transmissão de Arquivos Grandes
  4. Entrada Padrão, Saída Padrão e Argumentos do Processo
← Voltar para Dart Academy