through2-buffer
v1.0.0
Published
A simple through2 stream that buffers up a certain amount of data before passing anything through
Downloads
6
Readme
through2-buffer
A simple through2
stream that buffers up a certain amount of data before passing anything through.
This module generates a simple Transform stream that you can use in any (non-object-mode) pipeline, and that will only do a single thing: buffer up a stream to a certain amount. It's useful for eg. audio/video streams, where you want to have a 'headstart' to prevent underruns if your encoding process stalls for a moment.
The through2-buffer
will start out in buffering mode, and keep collecting incoming chunks of data until it hits the configured buffer size. At that moment, it switches to flowing mode, outputs the chunks it has collected, and pass through everything that comes afterwards.
Once the stream is in flowing mode, it will never go back to buffering mode; this is to prevent hiccups in the source stream from causing delayed hiccups in the output. You should make sure that your initial buffer is large enough to cover all the hiccups that you will encounter throughout the life of the stream.
License
WTFPL or CC0, whichever you prefer. A donation and/or attribution are appreciated, but not required.
Donate
My income consists largely of donations for my projects. If this module is useful to you, consider making a donation!
You can donate using Bitcoin, PayPal, Flattr, cash-in-mail, SEPA transfers, and pretty much anything else.
Contributing
Pull requests welcome. Please make sure your modifications are in line with the overall code style, and ensure that you're editing the files in src/
, not those in lib/
.
Build tool of choice is gulp
; simply run gulp
while developing, and it will watch for changes.
Be aware that by making a pull request, you agree to release your modifications under the licenses stated above.
Usage
Please be careful not to require the module as Buffer
or buffer
! That would cause confusion with the built-in Buffer
type in Node.js.
The following example would keep reading data from /dev/urandom
(and converting it to hexadecimal representation), and buffer 5 MiB of it. After that it will switch into flowing mode and pass everything through to the terminal, including the originally buffered data.
'use strict';
const through2Buffer = require("through2-buffer");
const fs = require("fs");
fs.createReadStream("/dev/urandom", "hex")
.pipe(streamBuffer(5 * 1024 * 1024)) /* 5 MiB buffer size */
.pipe(process.stdout);
API
through2Buffer(bufferSize)
Creates and returns a new through2-buffer
stream. Like all Node.js streams, this stream is single-use.
- bufferSize: The amount of bytes to buffer before switching into flowing mode.