Gli stream - Modulo fs di NodeJS

Gli stream  - Modulo fs di NodeJS

Un concetto molto importante in node sono gli stream (flusso) , un flusso di dati che si spostano da un punto sorgente ad una destinazione.

Gli stream sono importanti per due motivi principali:

  • perché garantiscono efficienza dal punto di vista della memoria;
  • perché garantiscono efficienza dal punto di vista della velocità di elaborazione.

Per capire il perché basta fare l'esempio del servizio di streaming Youtube o Netflix, affinché noi possiamo vedere un film su Netflix o un video YouTube non dobbiamo certamente attendere di ricevere l'intero video, ma possiamo usufruirne man mano che riceviamo il video. Man mano che riceviamo i dati in ingresso, il nostro dispositivo riceve un flusso continuo di dati che prende in carico ed elabora, permettendone la visione.

indice

Il metodo createReadStream

Gli stream sono molto utili quando dobbiamo lavorare con file di grosse dimensioni. Lavorando con gli stream possiamo evitare di dover caricare il file intero in memoria prima di poterlo elaborare o anche inviare come risposta ad una richiesta di un client.

createReadStream.js

const fs = require('fs');

const readable = fs.createReadStream('nuovoFile.txt', 
    {econding : 'utf8' , highWaterMark : 16 });

readable.on('data', dati  => {
    console.log(dati + '...');
});

Spiegazione step by step:

const fs = require('fs');

Importiamo il modulo nativo fs di node

const readable = fs.createReadStream('nuovoFile.txt', 
    {econding : 'utf8' , highWaterMark : 16 });

Per leggere da un file con il meccanismo degli stream utilizziamo il metodo fs.createReadStream .

Definiamo una costante readable, un oggetto di tipo ride stream che ci permette di gestire il flusso di dati e quindi invochiamo su fs il metodo createReadStream, passiamo come primo parametro il percorso ed il nome del file e come secondo parametro un oggetto con due proprietà:

  • la proprietà encoding con valore uft8
  • la proprietà highWaterMark con valore 16

Nell'esempio sopra, ogni volta che vengono letti 16bite del file nuovoFile.txt , node solleva l'oggetto 'data' che andremo poi a gestire con l'oggetto readable.

readable.on('data', dati  => {
    console.log(dati + '...');
});

Gli stream lavorano con gli eventi, quando sono disponibili highWaterMark, node emette un oggetto data che possiamo andare a gestire, in questo caso invochiamo .on per gestire l'oggetto data, e come secondo parametro passiamo la callback che riceverà in input i dati letti.

CreateReadStream nodejs
output CreateReadStream.js con highWaterMark impostato su 16bite e concatenazione dei 3 punti sospensivi sull'oggetto data gestito attraverso readable.on

Scritto da Donato Pirolo

Ciao, sono Donato, frontend developer con una smisurata passione per la SEO. Creo strumenti ad hoc per aiutare aziende e professionisti ad essere cercati sul web e trovare clienti.

Potrebbero interessarti

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Copyright © 2022
linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram