node.js - you - streaming with node js



createWriteStream vs writeFile? (1)

Quando lavori con gli stream in node.js, preferirai unirli.

In base agli eventi dei dati del Node Docs , viene emesso un buffer (per impostazione predefinita) o una stringa (se è stata impostata la codifica).

Quando si lavora con flussi di testo, è possibile utilizzare l'evento "dati" per concatenare tutti i blocchi di dati insieme. Quindi sarai in grado di lavorare con i tuoi dati come con una normale stringa.

Ma quando lavori con dati binari non è così semplice, perché riceverai buffer. Per concatenare i buffer devi usare metodi speciali come Buffer.concat . Quindi, è possibile utilizzare tale approccio per i flussi binari ma non ne vale la pena.

Aggiornare

Se vuoi farlo in modo difficile, prova il seguente codice:

var buffers = [];
readstrm.on('data', function(chunk) {
    buffers.push(chunk);
});
readstrm.on('end', function() {
    fs.writeFile('foo.png', Buffer.concat(buffers));
});

Non posso testare, ma sembra ok.

È facile notare quando qualcosa è andato storto controllando la dimensione del file.

Qual è la differenza fondamentale tra queste due operazioni?

someReadStream.pipe(fs.createWriteStream('foo.png'));

vs

someReadStream.on('data', function(chunk) { blob += chunk } );
someReadStream.on('end', function() { fs.writeFile('foo.png', blob) });

Quando si usa la libreria di richieste per lo scraping, posso salvare le immagini (png, bmp) ecc. Solo con il metodo precedente e con quest'ultimo c'è lo stesso dato gibbersh (binario) ma l'immagine non viene visualizzata.

Come sono differenti ?