Skip to content
Encode and decode streams into string streams in node.js
Branch: master
Clone or download
Latest commit 8d330f2 Aug 23, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitignore Added initial module files Jun 23, 2012
.travis.yml Update to use Transform streams, Node 4+ only, add tests Aug 23, 2018
LICENSE
README.md Update to use Transform streams, Node 4+ only, add tests Aug 23, 2018
example.js Update to use Transform streams, Node 4+ only, add tests Aug 23, 2018
package.json 1.0.0 Aug 23, 2018
stringstream.js
test.js Update to use Transform streams, Node 4+ only, add tests Aug 23, 2018

README.md

Decode streams into strings without setEncoding

const fs = require('fs')
const zlib = require('zlib')
const strs = require('stringstream')

const utf8Stream = fs.createReadStream('massiveLogFile.gz')
  .pipe(zlib.createGunzip())
  .pipe(strs('utf8'))

utf8Stream.on('data', str => console.log(`This will be a string: ${str}`))

API

  • strs(to, [options]) – creates a transform stream that converts the input into strings in to encoding (eg, utf8, hex, base64)
  • strs(from, to, [options]) – creates a transform stream converts the input from strings in from encoding to strings in to encoding

options can be anything compatible with the standard Node.js new stream.Transform([options]) constructor

NB: This library was originally written before Node.js correctly encoded base64 strings from streams

Back in the day, calling .setEncoding('base64') on a readable stream didn't align correctly, which was one of the main reasons I wrote this library – however this hasn't been the case for a long time, so this library is now really only useful in scenarios where you don't want to call .setEncoding() for whatever reason.

It also handles input and output text encodings:

// Stream from utf8 to hex to base64... Why not, ay.
const hex64Stream = fs.createReadStream('myFile.txt')
  .pipe(strs('utf8', 'hex'))
  .pipe(strs('hex', 'base64'))

Also deals with base64 output correctly by aligning each emitted data chunk so that there are no dangling = characters:

const stream = fs.createReadStream('myFile.jpg').pipe(strs('base64'))

let base64Str = ''

stream.on('data', data => base64Str += data)
stream.on('end', () => {
  console.log('My base64 encoded file is: ' + base64Str)
  console.log('Original file is: ' + Buffer.from(base64Str, 'base64'))
})
You can’t perform that action at this time.