0Pricing
Dart Academy · Lección

Transmisión de archivos grandes

Procese archivos fragmento a fragmento

Transmisión de archivos grandes es una lección gratuita de Dart Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Dart Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Dart Academy incluye 4 lecciones en total.

Por qué no leerlo todo

readAsString carga el archivo completo en memoria. En el caso de un registro o vídeo enorme, esto puede bloquear el programa, por lo que debe procesarlo mediante un stream.

Abrir un flujo de lectura

Llame a openRead en un File para obtener un flujo de fragmentos de bytes. Procese cada fragmento y descarte los anteriores.

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

Recorrer los fragmentos

Utilice await for para recibir cada fragmento a medida que llega. La memoria se mantiene estable, independientemente de cuánto crezca el archivo.

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

Los bytes necesitan decodificación

Cada fragmento contiene bytes sin procesar. Para leer texto, canalice el flujo mediante utf8.decoder y obtendrá fragmentos de tipo String.

stream.transform(utf8.decoder);

Dividir en líneas

Encadene LineSplitter después del decodificador y el flujo emitirá una línea ordenada cada vez, lista para procesarse.

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

Contar líneas de forma eficiente

Ahora contar un archivo de un millón de líneas es sencillo y consume pocos recursos. Incremente un contador dentro del bucle sin conservar el archivo completo.

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

Abrir un flujo de escritura

¿Está escribiendo una salida grande? openWrite devuelve un IOSink al que puede enviar datos gradualmente, escribiéndolos en el disco sobre la marcha.

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

Alimentar el sink

Envíe texto con sink.write o sink.writeln dentro de un bucle. Cada llamada transmite más datos sin reconstruir un String enorme.

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

Cerrar siempre el sink

Cuando termine, llame a close y espere su finalización. Esto vacía los últimos bytes y libera correctamente el identificador del archivo.

await sink.close();

Canalizar el flujo al sink

Para copiar un archivo de forma eficiente, canalice un flujo de lectura directamente a un sink de escritura mediante pipe. Dart gestiona la contrapresión por usted.

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

Gestionar errores del flujo

Los flujos pueden fallar durante el proceso. Incluya el bucle en un bloque try/catch para que un error de lectura no corrompa sus resultados silenciosamente.

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

Comprobación rápida

Debe procesar un registro de 5 GB en una máquina pequeña. ¿Cuál es el enfoque correcto?

Resumen

Ahora puede leer mediante streaming con openRead, decodificar y dividir en líneas, escribir gradualmente mediante un IOSink y usar pipe para realizar copias rápidas.

Preguntas frecuentes

¿La lección «Transmisión de archivos grandes» es gratis?

Sí — el texto completo de «Transmisión de archivos grandes» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Dart Academy, actualiza a CoddyKit PRO. El curso de Dart Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Transmisión de archivos grandes»?

Procese archivos fragmento a fragmento Practicas Dart Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Dart Academy?

No se requiere experiencia previa. Dart Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Transmisión de archivos grandes»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Dart Academy?

Sí. Cada lección de Dart Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Lectura y escritura de archivos
  2. Directorios, rutas y FileSystemEntity
  3. Transmisión de archivos grandes
  4. Stdin, Stdout y argumentos de procesos
← Volver a Dart Academy