
## :BufferStream : DataStream
A facilitation stream created for easy splitting or parsing buffers.
Useful for working on built-in Node.js streams from files, parsing binary formats etc.
A simple use case would be:
```javascript
fs.createReadStream('pixels.rgba')
.pipe(new BufferStream) // pipe a buffer stream into scramjet
.breakup(4) // split into 4 byte fragments
.parse(buffer => [
buffer.readInt8(0), // the output is a stream of R,G,B and Alpha
buffer.readInt8(1), // values from 0-255 in an array.
buffer.readInt8(2),
buffer.readInt8(3)
]);
```
**Kind**: static class
**Extends**: [DataStream](data-stream.md#module_scramjet.DataStream)
**Test**: test/methods/buffer-stream-constructor.js
* [:BufferStream](#module_scramjet.BufferStream) [DataStream](data-stream.md#module_scramjet.DataStream)
* [new BufferStream([opts])](#new_module_scramjet.BufferStream_new)
* [bufferStream.shift(chars, func)](#module_scramjet.BufferStream+shift) ↺
* [bufferStream.split(splitter)](#module_scramjet.BufferStream+split) ↺ [BufferStream](buffer-stream.md#module_scramjet.BufferStream)
* [bufferStream.breakup(number)](#module_scramjet.BufferStream+breakup) ↺ [BufferStream](buffer-stream.md#module_scramjet.BufferStream)
* [bufferStream.stringify([encoding])](#module_scramjet.BufferStream+stringify) [StringStream](string-stream.md#module_scramjet.StringStream)
* [bufferStream.parse(parser)](#module_scramjet.BufferStream+parse) [DataStream](data-stream.md#module_scramjet.DataStream)
* [BufferStream:pipeline(readable)](#module_scramjet.BufferStream.pipeline) [BufferStream](buffer-stream.md#module_scramjet.BufferStream)
* [BufferStream:from(stream, [options])](#module_scramjet.BufferStream.from) [BufferStream](buffer-stream.md#module_scramjet.BufferStream)
### new BufferStream([opts])
Creates the BufferStream
| Param | Type | Default | Description |
| --- | --- | --- | --- |
| [opts] | [DataStreamOptions](definitions.md#module_scramjet..DataStreamOptions) | {} | Stream options passed to superclass |
### bufferStream.shift(chars, func) ↺
Shift given number of bytes from the original stream
Works the same way as {@see DataStream.shift}, but in this case extracts
the given number of bytes.
**Kind**: instance method of [BufferStream](#module_scramjet.BufferStream)
**Chainable**
**Test**: test/methods/string-stream-shift.js
| Param | Type | Description |
| --- | --- | --- |
| chars | number | The number of bytes to shift |
| func | [ShiftBufferCallback](definitions.md#module_scramjet..ShiftBufferCallback) | Function that receives a string of shifted bytes |
### bufferStream.split(splitter) : BufferStream ↺
Splits the buffer stream into buffer objects
**Kind**: instance method of [BufferStream](#module_scramjet.BufferStream)
**Chainable**
**Returns**: [BufferStream](buffer-stream.md#module_scramjet.BufferStream) - the re-split buffer stream.
**Test**: test/methods/buffer-stream-split.js
| Param | Type | Description |
| --- | --- | --- |
| splitter | string \| Buffer | the buffer or string that the stream should be split by. |
### bufferStream.breakup(number) : BufferStream ↺
Breaks up a stream apart into chunks of the specified length
**Kind**: instance method of [BufferStream](#module_scramjet.BufferStream)
**Chainable**
**Returns**: [BufferStream](buffer-stream.md#module_scramjet.BufferStream) - the resulting buffer stream.
**Test**: test/methods/buffer-stream-breakup.js
| Param | Type | Description |
| --- | --- | --- |
| number | number | the desired chunk length |
### bufferStream.stringify([encoding]) : StringStream
Creates a string stream from the given buffer stream
Still it returns a DataStream derivative and isn't the typical node.js
stream so you can do all your transforms when you like.
**Kind**: instance method of [BufferStream](#module_scramjet.BufferStream)
**Returns**: [StringStream](string-stream.md#module_scramjet.StringStream) - The converted stream.
**Test**: test/methods/buffer-stream-tostringstream.js
| Param | Type | Default | Description |
| --- | --- | --- | --- |
| [encoding] | string \| any | "\"utf-8\"" | The encoding to be used to convert the buffers to streams. |
### bufferStream.parse(parser) : DataStream
Parses every buffer to object
The method MUST parse EVERY buffer into a single object, so the buffer
stream here should already be split or broken up.
**Kind**: instance method of [BufferStream](#module_scramjet.BufferStream)
**Returns**: [DataStream](data-stream.md#module_scramjet.DataStream) - The parsed objects stream.
**Test**: test/methods/buffer-stream-parse.js
| Param | Type | Description |
| --- | --- | --- |
| parser | [BufferParseCallback](definitions.md#module_scramjet..BufferParseCallback) | The transform function |
### BufferStream:pipeline(readable) : BufferStream
Creates a pipeline of streams and returns a scramjet stream.
**Kind**: static method of [BufferStream](#module_scramjet.BufferStream)
**Returns**: [BufferStream](buffer-stream.md#module_scramjet.BufferStream) - a new StringStream instance of the resulting pipeline
**See**: DataStream.pipeline
| Param | Type | Description |
| --- | --- | --- |
| readable | Array \| Iterable.<any> \| AsyncGeneratorFunction \| GeneratorFunction \| AsyncFunction \| function \| string \| Readable | the initial readable argument that is streamable by scramjet.from |
| ...transforms | Array.<(AsyncFunction\|function()\|Transform)> | Transform functions (as in [DataStream..use](DataStream..use)) or Transform streams (any number of these as consecutive arguments) |
### BufferStream:from(stream, [options]) : BufferStream
Create BufferStream from anything.
**Kind**: static method of [BufferStream](#module_scramjet.BufferStream)
**Returns**: [BufferStream](buffer-stream.md#module_scramjet.BufferStream) - new StringStream.
**See**: module:scramjet.from
| Param | Type | Default | Description |
| --- | --- | --- | --- |
| stream | Array \| Iterable.<any> \| AsyncGeneratorFunction \| GeneratorFunction \| AsyncFunction \| function \| Readable | | argument to be turned into new stream |
| [options] | [DataStreamOptions](definitions.md#module_scramjet..DataStreamOptions) \| Writable | {} | options passed to the new stream if created |