CodeAventura
Node.js
▸El sistema de archivos▸Streams: datos que fluyen

Misión

// Crea un stream de lectura y procesa datos por partes
// Usa createReadStream o Readable.from
// Procesa con .on('data') o .pipe()
// Ejecuta: node index.js

TerminalTema: Vintage
12 / 15Streams: datos que fluyen
Anterior

Streams: datos que fluyen

¿Y si el archivo es enorme?

En la lección anterior aprendiste a leer archivos con readFile. Esa función carga el archivo entero en memoria antes de hacer nada con él. Para un archivo de 1 KB, perfecto. Pero ¿qué pasa con un archivo de 2 GB?

Tu programa intentaría meter 2 GB en la RAM y probablemente colapsaría. Ese es el problema que resuelven los streams.

La analogía del grifo

Imagina que necesitas llenar una piscina. Tienes dos opciones:

  1. readFile: traer toda el agua de golpe en un camión cisterna gigante (necesitas un camión enorme)
  2. Stream: abrir un grifo y dejar que el agua fluya poco a poco (solo necesitas una tubería)

Los streams procesan datos por partes (llamadas chunks). En vez de esperar a tener todo, tu programa empieza a trabajar con el primer trozo mientras el resto sigue llegando.

Leyendo un archivo por chunks

Cada vez que llega un trozo de datos, se dispara el evento data. Cuando ya no hay más datos, se dispara end.

Observa algo interesante: aquí usamos require("node:fs") sin /promises, porque los streams usan eventos, no promesas. Es otra forma de trabajar con operaciones asíncronas en Node.

pipe: conectar flujos

La función más elegante de los streams es pipe. Conecta un stream de lectura con uno de escritura, como conectar dos tuberías:

Con una sola línea, pipe lee del archivo original y escribe en el destino, trozo a trozo, sin cargar todo en memoria. Es la forma más eficiente de copiar o transformar archivos grandes.

Tipos de streams en Node

Node tiene cuatro tipos de streams:

TipoQué haceEjemplo
ReadableLeer datosfs.createReadStream()
WritableEscribir datosfs.createWriteStream()
DuplexLeer y escribirSockets de red
TransformModificar datos al pasarCompresión, cifrado

Los más comunes en el día a día son Readable y Writable. Los otros los encontrarás en casos más avanzados.

¿Cuándo usar streams vs readFile?

La regla es sencilla:

  • Archivos pequeños (configuraciones, JSON, etc.) → readFile es más simple
  • Archivos grandes (logs, CSVs, videos) → streams evitan problemas de memoria
  • Datos en tiempo real (conexiones de red, procesamiento continuo) → streams son la única opción

Creando datos con Readable.from

No siempre lees de un archivo. A veces quieres crear un stream desde datos que ya tienes:

Readable.from convierte un array (o cualquier iterable) en un stream. Es útil para testing o para crear datos de prueba.

Tu desafío 🚀

  1. Crea un stream de lectura usando createReadStream o Readable.from
  2. Procesa los datos con el evento data o usa pipe
  3. Ejecuta tu script con node index.js en la terminal

Los streams son la razón por la que Node.js puede manejar millones de conexiones sin romperse. Es el superpoder del I/O eficiente.