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