-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathBufferStream.js
92 lines (78 loc) · 1.88 KB
/
BufferStream.js
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
"use strict";
class BufferStream {
constructor(buf, isBigEndian = true) {
this.pos = 0;
this.buf = Buffer.from(buf);
this.isBigEndian = isBigEndian;
}
read(length) {
let part = Buffer.from(this.buf.slice(this.pos, this.pos + length));
this.pos += length;
return part;
}
readInt8() {
let val = this.buf.readInt8(this.pos);
this.pos += 1;
return val;
}
readInt16() {
let val;
if(this.isBigEndian) val = this.buf.readInt16BE(this.pos);
else val = this.buf.readInt16LE(this.pos);
this.pos += 2;
return val;
}
readInt32() {
let val;
if(this.isBigEndian) val = this.buf.readInt32BE(this.pos);
else val = this.buf.readInt32LE(this.pos);
this.pos += 4;
return val;
}
readUInt8() {
let val = this.buf.readUInt8(this.pos);
this.pos += 1;
return val;
}
readUInt16() {
let val;
if(this.isBigEndian) val = this.buf.readUInt16BE(this.pos);
else val = this.buf.readUInt16LE(this.pos);
this.pos += 2;
return val;
}
readUInt32() {
let val;
if(this.isBigEndian) val = this.buf.readUInt32BE(this.pos);
else val = this.buf.readUInt32LE(this.pos);
this.pos += 4;
return val;
}
readFloat() {
let val;
if(this.isBigEndian) val = this.buf.readFloatBE(this.pos);
else val = this.buf.readFloatLE(this.pos);
this.pos += 4;
return val;
}
readDouble() {
let val;
if(this.isBigEndian) val = this.buf.readDoubleBE(this.pos);
else val = this.buf.readDoubleLE(this.pos);
this.pos += 8;
return val;
}
readString() {
let nextNull = this.buf.indexOf(0, this.pos);
if(nextNull === -1) return null;
let part = this.buf.slice(this.pos, nextNull)
this.pos = nextNull + 1;
return part;
}
align(size) {
if(this.pos % size !== 0) {
this.pos += size - (this.pos % size);
}
}
}
module.exports = BufferStream;