const emptyBuffer = Buffer.allocUnsafe(0); export class BufferReader { private buffer: Buffer = emptyBuffer; // TODO(bmc): support non-utf8 encoding private encoding: string = 'utf-8'; constructor(private offset: number = 0) { } public setBuffer(offset: number, buffer: Buffer): void { this.offset = offset; this.buffer = buffer; } public int16() { const result = this.buffer.readInt16BE(this.offset); this.offset += 2; return result; } public byte() { const result = this.buffer[this.offset]; this.offset++; return result; } public int32() { const result = this.buffer.readInt32BE(this.offset); this.offset += 4; return result; } public string(length: number): string { const result = this.buffer.toString(this.encoding, this.offset, this.offset + length); this.offset += length; return result; } public cstring(): string { var start = this.offset; var end = this.buffer.indexOf(0, start); this.offset = end + 1; return this.buffer.toString(this.encoding, start, end); } public bytes(length: number): Buffer { const result = this.buffer.slice(this.offset, this.offset + length); this.offset += length; return result; } }