Transmissão de Arquivos Grandes
Processe arquivos em partes.
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.
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
- Leitura e Gravação de Arquivos
- Diretórios, Caminhos e FileSystemEntity
- Transmissão de Arquivos Grandes
- Entrada Padrão, Saída Padrão e Argumentos do Processo