Simple and lightweight binary reader and writer classes for working with ArrayBuffers. Provides a convenient API for reading/writing integers, floats, and varints with support for little/big endian.
npm install github:zuenkoma/binary-rwimport { BinaryReader } from 'binary-rw';
// Create from an ArrayBuffer
const buffer = new ArrayBuffer(16);
const reader = new BinaryReader(buffer);
// Read values (automatically advances offset)
const int8 = reader.readInt8();
const uint16 = reader.readUint16(true); // little endian
const float32 = reader.readFloat32();
// Manual offset control
reader.skip(4); // skip 4 bytes
reader.seek(0); // go back to start
// Read variable-length integer (LEB128)
const varInt = reader.readVarInt();import { BinaryWriter } from 'binary-rw';
const writer = new BinaryWriter();
// Write values (automatically grows buffer)
writer.writeInt8(-42);
writer.writeUint16(65535, true); // little endian
writer.writeFloat32(3.14159);
// Write variable-length integer
writer.writeVarInt(300);
// Get the final buffer
const result = writer.toBuffer(); // ArrayBufferConstructor:
new BinaryReader(buffer: ArrayBuffer, offset: number = 0)
Methods:
skip(bytes: number): void- Skip specified number of bytesseek(offset: number): void- Move to absolute offsetreadInt8(): number- Read signed 8-bit integerreadUint8(): number- Read unsigned 8-bit integerreadInt16(littleEndian: boolean = false): number- Read signed 16-bit integerreadUint16(littleEndian: boolean = false): number- Read unsigned 16-bit integerreadInt32(littleEndian: boolean = false): number- Read signed 32-bit integerreadUint32(littleEndian: boolean = false): number- Read unsigned 32-bit integerreadFloat32(littleEndian: boolean = false): number- Read 32-bit floatreadFloat64(littleEndian: boolean = false): number- Read 64-bit floatreadVarInt(): number- Read LEB128 variable-length integer
Properties:
offset: number- Current read position (gettable and settable)
Constructor:
new BinaryWriter(initialSize: number = 32)- Create with initial buffer size
Methods:
writeInt8(value: number): void- Write signed 8-bit integerwriteUint8(value: number): void- Write unsigned 8-bit integerwriteInt16(value: number, littleEndian: boolean = false): void- Write signed 16-bit integerwriteUint16(value: number, littleEndian: boolean = false): void- Write unsigned 16-bit integerwriteInt32(value: number, littleEndian: boolean = false): void- Write signed 32-bit integerwriteUint32(value: number, littleEndian: boolean = false): void- Write unsigned 32-bit integerwriteFloat32(value: number, littleEndian: boolean = false): void- Write 32-bit floatwriteFloat64(value: number, littleEndian: boolean = false): void- Write 64-bit floatwriteVarInt(value: number): void- Write LEB128 variable-length integertoBuffer(): ArrayBuffer- Get the written data as ArrayBuffer
All read/write methods accept an optional littleEndian parameter:
true- little endian (Intel/x86)false- big endian (network byte order, default)