UNPKG

@jsprismarine/jsbinaryutils

Version:

Basic binary data managing tool written in TypeScript.

367 lines (366 loc) 10.1 kB
/// <reference types="node" /> export default class BinaryStream { private binary; private buffer; private readIndex; private writeIndex; /** * Creates a new BinaryStream instance. * @param {Buffer|null|undefined} buffer - The array or Buffer containing binary data. * @param {number} offset - The initial pointer position. */ constructor(buffer?: Buffer, offset?: number); /** * Reads a slice of buffer by the given length. * @param {number} len */ read(len: number): Buffer; /** * Appends a buffer to the main buffer. * @param {Buffer|Uint8Array} buf */ write(buf: Uint8Array): void; /** * Reads an unsigned byte (0 to 255). * @returns {number} */ readByte(): number; /** * Writes an unsigned byte (0 to 255). * @param {number} v */ writeByte(v: number): void; /** * Reads a signed byte (-128 to 127). * @returns {number} */ readSignedByte(): number; /** * Writes a signed byte (-128 to 127). * @param {number} v */ writeSignedByte(v: number): void; /** * Reads a boolean (true or false). * @returns {boolean} */ readBoolean(): boolean; /** * Writes a boolean (true or false). * @param {boolean} v */ writeBoolean(v: boolean): void; /** * Reads a 16 bit (2 bytes) signed big-endian number. * @returns {number} */ readShort(): number; /** * Writes a 16 bit (2 bytes) signed big-endian number. * @param {number} v */ writeShort(v: number): void; /** * Reads a 16 bit (2 bytes) signed little-endian number. * @returns {number} */ readShortLE(): number; /** * Writes a 16 bit (2 bytes) signed big-endian number. * @param {number} v */ writeShortLE(v: number): void; /** * Reads a 16 bit (2 bytes) unsigned big-endian number. * @returns {number} */ readUnsignedShort(): number; /** * Writes a 16 bit (2 bytes) unsigned big-endian number. * @param {number} v */ writeUnsignedShort(v: number): void; /** * Reads a 16 bit (2 bytes) unsigned little-endian number. * @returns {number} */ readUnsignedShortLE(): number; /** * Writes a 16 bit (2 bytes) unsigned little-endian number. * @param {number} v */ writeUnsignedShortLE(v: number): void; /** * Reads a 24 bit (3 bytes) signed big-endian number. * @returns {number} */ readTriad(): number; /** * Writes a 24 bit (3 bytes) signed big-endian number. * @param {number} v */ writeTriad(v: number): void; /** * Reads a 24 bit (3 bytes) little-endian number. * @returns {number} */ readTriadLE(): number; /** * Writes a 24 bit (3 bytes) signed little-endian number. * @param {number} v */ writeTriadLE(v: number): void; /** * Reads a 24 bit (3 bytes) unsigned big-endian number. * @returns {number} */ readUnsignedTriad(): number; /** * Writes a 24 bit (3 bytes) unsigned big-endian number. * @param {number} v */ writeUnsignedTriad(v: number): void; /** * Reads a 24 bit (3 bytes) unsigned little-endian number. * @returns {number} */ readUnsignedTriadLE(): number; /** * Writes a 24 bit (3 bytes) unsigned little-endian number. * @param {number} v */ writeUnsignedTriadLE(v: number): void; /** * Reads a 32 bit (4 bytes) big-endian signed number. * @returns {number} */ readInt(): number; /** * Writes a 32 bit (4 bytes) big-endian signed number. * @param {number} v */ writeInt(v: number): void; /** * Reads a 32 bit (4 bytes) signed number. * @returns {number} */ readIntLE(): number; /** * Writes a 32 bit (4 bytes) little-endian signed number. * @param {number} v */ writeIntLE(v: number): void; /** * Reads a 32 bit (4 bytes) big-endian unsigned number. * @returns {number} */ readUnsignedInt(): number; /** * Writes a 32 bit (4 bytes) big-endian unsigned number. * @param {number} v */ writeUnsignedInt(v: number): void; /** * Reads a 32 bit (4 bytes) little-endian unsigned number. * @returns {number} */ readUnsignedIntLE(): number; /** * Writes a 32 bit (4 bytes) little-endian unsigned number. * @param {number} v */ writeUnsignedIntLE(v: number): void; /** * Returns a 32 bit (4 bytes) big-endian flating point number. * @returns {number} */ readFloat(): number; /** * Writes a 32 bit (4 bytes) big-endian floating point number. * @param {number} v */ writeFloat(v: number): void; /** * Returns a 32 bit (4 bytes) big-endian flating point number. * @returns {number} */ readFloatLE(): number; /** * Writes a 32 bit (4 bytes) little-endian floating point number. * @param {number} v */ writeFloatLE(v: number): void; /** * Returns a 64 bit (8 bytes) big-endian flating point number. * @returns {number} */ readDouble(): number; /** * Writes a 64 bit (8 bytes) big-endian floating point number. * @param {number} v */ writeDouble(v: number): void; /** * Returns a 64 bit (8 bytes) little-endian flating point number. * @returns {number} */ readDoubleLE(): number; /** * Writes a 64 bit (8 bytes) little-endian floating point number. * @param {number} v */ writeDoubleLE(v: number): void; /** * Returns a 64 bit (8 bytes) signed big-endian number. * @returns {bigint} */ readLong(): bigint; /** * Writes a 64 bit (8 bytes) signed big-endian number. * @param {bigint} v */ writeLong(v: bigint): void; /** * Returns a 64 bit (8 bytes) signed little-endian number. * @returns {bigint} */ readLongLE(): bigint; /** * Writes a 64 bit (8 bytes) signed big-endian number. * @param {bigint} v */ writeLongLE(v: bigint): void; /** * Returns a 64 bit (8 bytes) unsigned big-endian number. * @returns {bigint} */ readUnsignedLong(): bigint; /** * Writes a 64 bit (8 bytes) unsigned big-endian number. * @param {bigint} v */ writeUnsignedLong(v: bigint): void; /** * Returns a 64 bit (8 bytes) unsigned little-endian number. * @returns {bigint} */ readUnsignedLongLE(): bigint; /** * Writes a 64 bit (8 bytes) unsigned big-endian number. * @param {bigint} v */ writeUnsignedLongLE(v: bigint): void; /** * Reads a 32 bit (4 bytes) zigzag-encoded number. * @returns {number} */ readVarInt(): number; /** * Writes a 32 bit (4 bytes) zigzag-encoded number. * @param {number} v */ writeVarInt(v: number): void; /** * Reads a 32 bit unsigned number. * @returns {number} */ readUnsignedVarInt(): number; /** * Writes a 32 bit unsigned number with variable-length. * @param {number} v */ writeUnsignedVarInt(v: number): void; /** * Reads a 64 bit zigzag-encoded variable-length number. * @returns {bigint} */ readVarLong(): bigint; /** * Writes a 64 bit unsigned zigzag-encoded number. * @param {bigint} v */ writeVarLong(v: bigint): void; /** * Reads a 64 bit unsigned variable-length number. * @returns {bigint} */ readUnsignedVarLong(): bigint; /** * Writes a 64 bit unsigned variable-length number. * @param {bigint} v */ writeUnsignedVarLong(v: bigint): void; /** * Increases the write offset by the given length. * @param {number} length */ private addOffset; /** * Returns whatever or not the read offset is at end of line. * @returns {number} */ feof(): boolean; /** * Reads the remaining bytes and returns the buffer slice. * @returns {Buffer} */ readRemaining(): Buffer; /** * Skips len bytes on the buffer. * @param {number} len */ skip(len: number): void; /** * Returns the encoded buffer. * @returns {Buffer} */ getBuffer(): Buffer; /** * Sets the buffer for reading. * make sure to reset the reading index! * @param buf - The new Buffer. */ setBuffer(buf: Buffer): void; /** * Clears the whole BinaryStream instance. */ clear(): void; /** * Conventional method to reuse the stream * without having to create a new BinaryStream instance. * @param buf - The new buffer instance. */ reuse(buf: Buffer): void; /** * Sets the reading index. * @param index - The new read index. */ setReadIndex(index: number): void; /** * Sets the new writing index. * @param index - The new write index. */ setWriteIndex(index: number): void; /** * Retuns the read index. * @returns {number} */ getReadIndex(): number; /** * Returns the write index. * @returns {number} */ getWriteIndex(): number; /** * Do read assertions, check if the read buffer is null. * @param {number} byteLength */ private doReadAssertions; /** * Do read assertions, check if the read buffer is null. * @param {number|bigint} num * @param {number|bigint} minVal * @param {number|bigint} maxVal */ private doWriteAssertions; }