https://github.com/wiiseguy/node-streambuf
Streamed Buffers - .NET's BinaryReader facsimile
https://github.com/wiiseguy/node-streambuf
binary-reader buffered-reader buffers node streams
Last synced: 8 months ago
JSON representation
Streamed Buffers - .NET's BinaryReader facsimile
- Host: GitHub
- URL: https://github.com/wiiseguy/node-streambuf
- Owner: Wiiseguy
- License: mit
- Created: 2017-12-27T15:23:44.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2024-07-04T16:43:45.000Z (over 1 year ago)
- Last Synced: 2024-11-06T07:16:06.510Z (over 1 year ago)
- Topics: binary-reader, buffered-reader, buffers, node, streams
- Language: TypeScript
- Size: 3.05 MB
- Stars: 4
- Watchers: 1
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# streambuf - Stream Buffers  [](https://codecov.io/gh/Wiiseguy/node-streambuf) 
> Stream Buffers - .NET's BinaryReader facsimile for Node.js
This library wraps most of [Buffer](https://nodejs.org/api/buffer.html)'s methods. The difference with Buffer is that with streambuf you don't have to specify an offset each read/write operation, it uses an internal cursor.
`streambuf` offers a low-level API that similar to C++'s [fstream/iostream/etc.](https://www.cplusplus.com/reference/iolibrary/) or .NET's [BinaryReader/BinaryWriter](https://docs.microsoft.com/en-us/dotnet/api/system.io).
If you're looking for a library that is more high-level and built on top of `streambuf`, check out [node-structor](https://github.com/Wiiseguy/node-structor).
## Install
```
$ npm install streambuf
```
## Usage
```js
const fs = require('fs');
const { StreamBuffer } = require('streambuf');
let buffer = StreamBuffer.from(fs.readFileSync('hiscore.dat'));
let nameLength = buffer.readUInt32LE();
let name = buffer.readString(nameLength);
buffer.skip(-nameLength); // go back to the beginning of the name
buffer.writeString(name.toUpperCase()); // overwrite the name in the buffer with something else
```
Refer to [Buffer](https://nodejs.org/api/buffer.html) for a list of available read and write methods supported by StreamBuffer (omit the offset param).
## API
StreamBuffer(Buffer)
---
Constructor: initialize with a Buffer object.
StreamBuffer(StreamBuffer)
---
Constructor: initialize with another StreamBuffer object's underlying Buffer.
StreamBuffer numeric methods
---
readInt8, readInt16LE, readInt16BE, readInt32LE, readInt32BE, readIntLE, readIntBE,
readUInt8, readUInt16LE, readUInt16BE, readUInt32LE, readUInt32BE, readUIntLE, readUIntBE,
readFloatLE, readFloatBE, readDoubleLE, readDoubleBE
writeInt8, writeInt16LE, writeInt16BE, writeInt32LE, writeInt32BE, writeIntLE, writeIntBE,
writeUInt8, writeUInt16LE, writeUInt16BE, writeUInt32LE, writeUInt32BE,
writeFloatLE, writeFloatBE, writeDoubleLE, writeDoubleBE
StreamBuffer BigInt methods
---
readBigInt64LE, readBigInt64BE, readBigUInt64LE, readBigUInt64BE,
writeBigInt64LE, writeBigInt64BE, writeBigUInt64LE, writeBigUInt64BE
.buffer
---
Provides raw access to the underlying Buffer object (read-only)
.read(numBytes)
---
Returns a new StreamBuffer that references the same Buffer as the original, but cropped by offset and offset + numBytes.
.write(buffer: Buffer)
---
Writes the contents of another Buffer.
.readByte()
---
Alias for .readUInt8()
.readSByte()
---
Alias for .readInt8()
.writeByte()
---
Alias for .writeUInt8()
.writeSByte()
---
Alias for .writeInt8()
.read7BitInt()
---
Reads a 7 bit encoded integer, like those used by [.NET](https://msdn.microsoft.com/en-us/library/system.io.binarywriter.write7bitencodedint(v=vs.110).aspx)
.write7BitInt()
---
Writes a 7 bit encoded integer, like those used by [.NET](https://msdn.microsoft.com/en-us/library/system.io.binarywriter.write7bitencodedint(v=vs.110).aspx)
.readChar([encoding])
---
Reads a single character from the buffer according to the specified character encoding. Multi-byte characters are not read - use `readString` for that instead.
'encoding' defaults to utf8.
.writeChar([encoding])
---
Writes a single character to the buffer according to the specified character encoding. Multi-byte characters are not written - use `writeString` for that instead.
'encoding' defaults to utf8.
.readString([length, [encoding]])
---
Decodes to a string according to the specified character encoding in encoding and length.
'encoding' defaults to utf8.
'length' is optional. If left undefined, it will use the first occurrence of a zero (0) byte as the end of the string.
.writeString(str, [encoding])
---
Writes a string to the underlying buffer with the specified encoding.
'encoding' defaults to utf8.
.peekString([length, [encoding]])
---
Functions the same way as .readString(), but does not update the offset.
.readString0([encoding])
---
Reads a string from the buffer according to the specified character encoding, stopping at the first zero (0) byte. Similar to calling .readString() without a length parameter, but more implicit.
'encoding' defaults to utf8.
.writeString0(str, [encoding])
---
Writes a string to the underlying buffer with the specified encoding, followed by a zero (0) byte.
'encoding' defaults to utf8.
.readString7([encoding])
---
A specialized version of readString(), it first reads a 7 bit encoded integer and uses that as the length of the to be read string. Can be used to read strings written by .NET's BinaryWriter.
.writeString7([encoding])
---
A specialized version of writeString(), it first writes a 7 bit encoded integer representing the length of the string, followed by the string.
.skip(numBytes)
---
Skips the specified number of bytes. A negative number can be used to rewind.
.setPos(pos) / .seek(pos)
---
Moves the offset to the specified pos.
.getPos() / .tell()
---
Returns the current offset.
.rewind()
---
Moves the offset back to 0.
.isEOF()
---
Returns true if the end of the buffer is reached. (offset >= buffer.length)