diff --git a/src/ArrayBufferStream.js b/src/ArrayBufferStream.js index 86d62f2..e5b8a84 100644 --- a/src/ArrayBufferStream.js +++ b/src/ArrayBufferStream.js @@ -150,7 +150,17 @@ class ArrayBufferStream { * @return {number} the next 32 bit integer in the stream */ readInt32 () { - const val = new Int32Array(this.arrayBuffer, this._position, 1)[0]; + // const sliced = this.arrayBuffer.slice + let val; + if (this._position % 4 === 0) { + val = new Int32Array(this.arrayBuffer, this._position, 1)[0]; + } else { + // Cannot read Int32 directly out because offset is not multiple of 4 + // Need to slice out the values first + val = new Int32Array( + this.arrayBuffer.slice(this._position, this._position + 4) + )[0]; + } this._position += 4; // one 32 bit int is 4 bytes return val; }