¿Cómo hacer tuberías/transmisión de objetos JavaScript en Node.js?

Este artículo brinda información breve sobre la implementación de tuberías/flujos en node.js y explica el funcionamiento de varias partes como búferes, flujos y cómo implementar tuberías en node.js

Búferes: estos son el lugar de almacenamiento temporal para una porción de datos que se transfieren de un lugar a otro, el búfer se llena con datos y luego se transmite. El búfer transfiere los pequeños fragmentos de datos a la vez. Los búferes son muy útiles ya que no tenemos que esperar a que se complete el proceso de transferencia porque llenamos el búfer, que es el lugar de almacenamiento temporal para los datos que luego se pueden pasar por completo.

Flujos: Son el método de manejo de datos que se utiliza para la transferencia de los datos. Aumenta el rendimiento ya que los datos se procesan incluso antes de la transferencia completa de los datos. Recopila los pequeños fragmentos de búfer juntos y cuando el búfer está lleno, pasa los datos por el flujo para ser procesados ​​y enviados al cliente. Son un método de manejo de datos y se utilizan para leer o escribir entradas en salidas siguiendo una secuencia adecuada. Almacene en búfer y transmita juntos mientras reproduce un video en línea, no necesita esperar a que se procese el video completo, sino que se transfieren pequeñas secciones con la ayuda de búferes y transmisiones poco a poco.

Flujo legible: los flujos legibles se usan para extraer información de cualquier fuente que se usan para leer los datos que están presentes en cualquier fuente, y luego podemos usar esos datos para transferir a cualquier fuente o almacenar en nuestro sistema. Los flujos legibles emiten un evento en forma de fragmentos (recibidos de los búferes) que son una pequeña parte de los datos que deben procesarse.

Ejemplo: Cree un archivo read.txt en el directorio del proyecto actual con algún texto de muestra, en este caso, tenemos el siguiente texto.

THIS IS READ.TXT FILE

Nombre de archivo: index.js

Javascript

// Requiring file system module
var fs = require('fs');
 
// Creating a read stream
var myReadStream = fs.createReadStream('read.txt', 'utf8');
 
myReadStream.on('data', function (chunk) {
  console.log("new chunk received");
 
  // Printing the chunk
  console.log(chunk);
});

Producción:

new chunk received 
THIS IS READ.TXT FILE

Flujos de escritura: el flujo de escritura le permite enviar los datos a cualquier fuente destinada que puede ser cualquier archivo o transmitir en línea. Estos flujos también emiten los eventos para garantizar el correcto funcionamiento a intervalos regulares de tiempo. 

Ejemplo: Cree un archivo index.js con el siguiente código.

Nombre de archivo: index.js

Javascript

// Requiring file system module
var fs = require('fs');      
 
// Creating a write stream
// It will create a txt file in provided location
var myWriteStream =
    fs.createWriteStream(__dirname + '/write.txt');
 
// Writing on stream
myWriteStream.write("Greetings from GeeksforGeeks");

Salida: Se generará un nuevo archivo llamado write.txt en el directorio actual que contendrá los siguientes datos.

Greetings from GeeksforGeeks

Tubería usando tubería():

La canalización es un método para transferir datos de un flujo a otro directamente con la ayuda de búferes para que el proceso de transferencia de datos pueda comenzar tan pronto como llene un búfer. En otras palabras, la canalización se utiliza para procesar datos transmitidos en varios pasos. Este es un método de módulo para canalizar errores de reenvío de secuencias y limpiar correctamente y proporcionar una devolución de llamada cuando se completa la canalización.

Ejemplo: Cree un archivo read.txt en el directorio del proyecto actual con algún texto de muestra, en este caso, tenemos el siguiente texto.

THIS IS READ.TXT FILE

Nombre de archivo: index.js

Javascript

var fs = require('fs');
const zlib = require('zlib');
const { pipeline } = require('stream');
 
// Constructing promisify
const { promisify } = require('util');
const pipelineAsync = promisify(pipeline);
 
// Creating a read stream
var myReadStream = fs.createReadStream(
      __dirname + '/read.txt', 'utf8');
 
// Creating a write stream
var myWriteStream = fs.createWriteStream(
      __dirname + '/write.txt');
 
// Creating transform stream
const transform = zlib.createGzip();
 
(async function run() {
   try {
 
      // Pipelining three streams
      await pipelineAsync(
 
         // Reading from read stream
         myReadStream,
 
         // Transforming the file
         transform,
 
         // Writing on write stream
         myWriteStream
      );
      console.log("Pipeline accomplished");
   }
   catch (err) {
      console.error('pipeline failed with error:', err);
   }
})();

Salida: Veremos la siguiente salida y se generará el archivo write.txt en el directorio actual.

Pipeline accomplished

Nota: Se debe usar la tubería en lugar de una tubería, ya que la tubería no es segura, pero la implementación en la tubería se muestra a continuación:

Nombre de archivo: index.js

Javascript

// Requiring file system module
var fs = require('fs');      
 
// Creating a read stream
var myReadStream = fs.createReadStream(
        __dirname + '/read.txt','utf8');
 
// Creating a write stream
var myWriteStream = fs.createWriteStream(
        __dirname + '/write.txt');
 
// Piping using pipe
myReadStream.pipe(myWriteStream);  
console.log("Pipeing accomplished");

Salida: Veremos la siguiente salida y se generará el archivo write.txt en el directorio actual.

Pipeing accomplished

Publicación traducida automáticamente

Artículo escrito por maddler y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *