Contenido

Aprender a usar Streams con facilidad

Los streams son una de las grandes fortalezas con las que cuenta Node.js. En esencia, un Stream es una colección de datos que no esta disponible de una sola vez, ya que se transmite fragmento a fragmento (denominados chunks en ingles). Esto te permite trabajar con cada fragmento sin esperar a tener disponible todos los datos.

Los streams trabaja por defecto con buffers, siempre que no se haya configurado específicamente para trabajar con objectos.

Se implementan a Node.js gracias a la clase Stream

¿Por qué usar streams?

Se trata de una herramienta esencial cuan se trabaja con volúmenes de datos muy grandes y estos no caben en memoria. Por si desconoces el dato, el proceso de Node.js tiene un limite de memoria de 2gb. Si intentas trabajar en memoria con cantidades de datos superiores, te encontrarás con un bonito error de memoria superada.

Este problema lo solucionan los streams, ya que al trabajar fragmento a fragmento permite ir liberando la memoria a medida que se ha utilizado la información.

La otra gran característica de los streams es que son componibles. Esto significa que pueden conectarse y combinares unos streams con otros para formar pipelines de procesamiento de datos.

Tipos de streams

Existen varios tipos de streams pero los principales son 4:

  • Readable: Una fuente de entrada de datos. Es decir, recibe datos de entrada.
  • Writable: Destino de datos. Es decir, escribe datos
  • Duplex: Es una mezcla de los dos anteriores. Implementa la interfaz Readable y Writable y por lo tanto puedes recibir y escribir datos.
  • Transform: Es un stream de tipo Duplex. Los datos al pasar por este tipo de stream se modifican. Por lo tanto, los datos de entrada no pueden ser iguales a los datos de salida.

Tipos de streams

Existen varios tipos de streams pero los principales son 4:

  • Readable: Una fuente de entrada de datos. Es decir, recibe datos de entrada.
  • Writable: Destino de datos. Es decir, escribe datos
  • Duplex: Es una mezcla de los dos anteriores. Implementa la interfaz Readable y Writable y por lo tanto puedes recibir y escribir datos.
  • Transform: Es un stream de tipo Duplex. Los datos al pasar por este tipo de stream se modifican. Por lo tanto, los datos de entrada no pueden ser iguales a los datos de salida.

Eventos

Cabe destacar que, como muchas funcionalidades implementadas en Node.js, stream implementa la interfaz EventEmitter. Por lo que nos permite, en función del tipo de stream, escuchar ciertos eventos que producen.

Sin embargo, no se recomienda el uso de eventos y streams salvo en excepciones.