DEV Community

Cover image for 5 examples of reading, writing and pipelining streams in NodeJS
Onelinerhub
Onelinerhub

Posted on

4 1

5 examples of reading, writing and pipelining streams in NodeJS

1. Piping input to output stream (file examples)

const fs = require('fs');
let input = fs.createReadStream('/var/www/examples/test.txt');
let output = fs.createWriteStream('/tmp/out.txt');
input.pipe(output);
Enter fullscreen mode Exit fullscreen mode
  • require('fs') - library to work with file system,
  • fs.createReadStream( - create stream to read data from (file in our case),
  • fs.createWriteStream - open file and create writing stream from it,
  • /var/www/examples/test.txt - path to file to stream read,
  • /tmp/out.txt - path to file to write stream to,
  • .pipe( - pipe input stream to output (in our case - read from input file and write to output).

Open original or edit on Github.

2. Preferred way to pipeline streams

const fs = require('fs');
const { pipeline } = require('stream');

let input = fs.createReadStream('/var/www/examples/test.txt');
let output = fs.createWriteStream('/tmp/out.txt');

pipeline(input, output, (err) => console.log(err));
Enter fullscreen mode Exit fullscreen mode
  • require('fs') - library to work with file system,
  • fs.createReadStream( - create stream to read data from (file in our case),
  • fs.createWriteStream - open file and create writing stream from it,
  • /var/www/examples/test.txt - path to file to stream read,
  • /tmp/out.txt - path to file to write stream to,
  • pipeline - pipelines given streams (left to right) and properly destroys all objects after processing,
  • (err) => console.log(err) - last argument of pipeline() is always error callback.

Open original or edit on Github.

3. How to read input stream to Buffer

const fs = require('fs');
let input = fs.createReadStream('/var/www/examples/test.txt');

input.on('data', buf => {
  console.log(buf);
});
Enter fullscreen mode Exit fullscreen mode
  • require('fs') - library to work with file system,
  • fs.createReadStream( - create stream to read data from (file in our case),
  • /var/www/examples/test.txt - path to file to stream read,
  • .on('data' - handle date reading from stream,
  • buf - buffer gets data chunk read from stream.

Open original or edit on Github.

4. How to read input stream to string

const fs = require('fs');
let input = fs.createReadStream('/var/www/examples/test.txt');

const chunks = [];
input.on('data', buf => chunks.push(buf));
input.on('end', () => console.log( Buffer.concat(chunks).toString() ))
Enter fullscreen mode Exit fullscreen mode
  • require('fs') - library to work with file system,
  • fs.createReadStream( - create stream to read data from (file in our case),
  • /var/www/examples/test.txt - path to file to stream read,
  • .on('data' - handle date reading from stream,
  • chunks.push(buf) - push each chunk into array,
  • Buffer.concat(chunks) - join all chunks into single buffer,
  • .toString() - convert Buffer to string,
  • input.on('end' - fire when stream reading was finished.

Open original or edit on Github.

5. How to transform streams using Transform interface

const fs = require('fs');
const { Transform } = require("stream");

let input = fs.createReadStream('/var/www/examples/test.txt');

const my_transform = new Transform({
  transform(chunk, encoding, callback) {
    callback(null, 'TRANSFORMED: ' + chunk.toString());
  },
});

my_transform.on('data', buf => console.log(buf.toString()));

input.pipe(my_transform);
Enter fullscreen mode Exit fullscreen mode
  • require('fs') - library to work with file system,
  • fs.createReadStream( - create stream to read data from (file in our case),
  • new Transform( - create new stream that transforms data,
  • transform(chunk, encoding, callback) - chunk transformation function,
  • 'TRANSFORMED: ' + chunk.toString() - return transformed chunk to callback (we add TRANSFORMED: text to chunk as transformation example),
  • .on('data' - handle date reading from stream,
  • .pipe( - pipe object to the given stream (read from file and pipe to transforming stream).

Open original or edit on Github.

SurveyJS custom survey software

Simplify data collection in your JS app with a fully integrated form management platform. Includes support for custom question types, skip logic, integrated CCS editor, PDF export, real-time analytics & more. Integrates with any backend system, giving you full control over your data and no user limits.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs