baniol
5/18/2014 - 6:49 PM

nodejs streams

nodejs streams

// From: http://codewinds.com/blog/2013-08-04-nodejs-readable-streams.html


//Simple example of reading a file and echoing it to stdout:

var fs = require('fs');
var readStream = fs.createReadStream('../sources/bible.txt');
readStream.pipe(process.stdout);

// ====================================================================================

//Creating a sha1 digest of a file and echoing the result to stdout(similar to shasum):

var crypto = require('crypto');
var fs = require('fs');

var readStream = fs.createReadStream('../sources/bible.txt');
var hash = crypto.createHash('sha1');
readStream
  .on('data', function(chunk) {
    // console.log(chunk.length);
    hash.update(chunk);
  })
  .on('end', function() {
    console.log(hash.digest('hex'));
  });

// ====================================================================================

// With Node.js 0.10+ there is a better way to consume streams. 
// The Readable interface makes it easier to work with streams, 
// especially streams where you want to do other things between creating a stream and using the stream. 
// These newer Readable streams are `pull` streams where you request the data 
// when you are ready for it rather than having the data pushed to you.

var crypto = require('crypto');
var fs = require('fs');
var readStream = fs.createReadStream('../sources/bible.txt');
var hash = crypto.createHash('sha1');
readStream
  .on('readable', function () {
    var chunk;
    while (null !== (chunk = readStream.read())) {
      hash.update(chunk);
    }
  })
  .on('end', function () {
    console.log(hash.digest('hex'));
  });

// The key to understanding this example is that with the new streams2 Readable interface, 
// a readable event will be emitted as soon as data is available to be read 
// and you can call .read() to read chunks of it. 
// Once there is no more data available, .read() returns null, 
// but then another readable event is fired again when data is available again. 
// This continues until the end of the file when end is fired like before.