-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
/
Copy pathBufferReader.ts
44 lines (43 loc) · 1.22 KB
/
BufferReader.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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;
}
}