A high-performance TypeScript library for binary data manipulation in Node.js applications. JSBinaryUtils provides efficient buffer management without the overhead of repeated allocations, making it ideal for real-time applications and network protocols.
npm install @jsprismarine/jsbinaryutils
import BinaryStream from '@jsprismarine/jsbinaryutils';
const buffer = Buffer.from([0xFF, 0x00, 0x7F, 0x80]);
const stream = new BinaryStream(buffer);
const byte = stream.readByte(); // 255
const signed = stream.readSignedByte(); // 0
const short = stream.readShort(); // 32640
import BinaryStream from '@jsprismarine/jsbinaryutils';
const stream = new BinaryStream();
stream.writeByte(255);
stream.writeShort(32640);
stream.writeVarInt(12345);
const result = stream.getWriteBuffer();
readByte() / writeByte(v) - Unsigned byte (0-255)readSignedByte() / writeSignedByte(v) - Signed byte (-128 to 127)readBoolean() / writeBoolean(v) - Boolean valuereadShort() / writeShort(v) - 16-bit signed integer (BE)readShortLE() / writeShortLE(v) - 16-bit signed integer (LE)readUnsignedShort() / writeUnsignedShort(v) - 16-bit unsigned integer (BE)readInt() / writeInt(v) - 32-bit signed integer (BE)readUnsignedInt() / writeUnsignedInt(v) - 32-bit unsigned integer (BE)readTriad() / writeTriad(v) - 24-bit signed integer (BE)readTriadLE() / writeTriadLE(v) - 24-bit signed integer (LE)readUnsignedTriad() / writeUnsignedTriad(v) - 24-bit unsigned integer (BE)readFloat() / writeFloat(v) - 32-bit float (BE)readFloatLE() / writeFloatLE(v) - 32-bit float (LE)readDouble() / writeDouble(v) - 64-bit double (BE)readDoubleLE() / writeDoubleLE(v) - 64-bit double (LE)readLong() / writeLong(v) - 64-bit signed BigInt (BE)readLongLE() / writeLongLE(v) - 64-bit signed BigInt (LE)readUnsignedLong() / writeUnsignedLong(v) - 64-bit unsigned BigInt (BE)readVarInt() / writeVarInt(v) - 32-bit zigzag-encoded VarIntreadUnsignedVarInt() / writeUnsignedVarInt(v) - 32-bit unsigned VarIntreadVarLong() / writeVarLong(v) - 64-bit zigzag-encoded VarLongreadUnsignedVarLong() / writeUnsignedVarLong(v) - 64-bit unsigned VarLongread(length) - Read raw byteswrite(buffer) - Write raw bytesskip(length) - Skip bytesreadRemaining() - Read all remaining bytesgetReadBuffer() / getWriteBuffer() - Get underlying bufferssetReadBuffer(buffer, index?) - Set read buffersetWriteBuffer(buffer, index?) - Set write buffergetReadIndex() / setReadIndex(index) - Manage read positiongetWriteIndex() / setWriteIndex(index) - Manage write positionclear() - Reset streamreuse(buffer) - Reuse stream with new bufferfeof() - Check end of bufferFull API documentation with detailed method descriptions and examples is available at: https://jsprismarine.github.io/JSBinaryUtils/
JSBinaryUtils uses a dynamic buffer allocation strategy that minimizes memory overhead:
This approach significantly outperforms naive Buffer.concat() operations in high-throughput scenarios.
ISC
Contributions are welcome. Please open an issue or submit a pull request on GitHub.