![Scramjet Logo](https://scramjet.org/logos/scramjet-logo-light.svg) ## :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 |