angular-3d-viewer
Version:
110 lines (94 loc) • 2.67 kB
JavaScript
export class BinaryReader
{
constructor (arrayBuffer, isLittleEndian)
{
this.arrayBuffer = arrayBuffer;
this.dataView = new DataView (arrayBuffer);
this.isLittleEndian = isLittleEndian;
this.position = 0;
}
GetPosition ()
{
return this.position;
}
SetPosition (position)
{
this.position = position;
}
GetByteLength ()
{
return this.arrayBuffer.byteLength;
}
Skip (bytes)
{
this.position = this.position + bytes;
}
End ()
{
return this.position >= this.arrayBuffer.byteLength;
}
ReadArrayBuffer (byteLength)
{
let originalBufferView = new Uint8Array (this.arrayBuffer);
let arrayBuffer = new ArrayBuffer (byteLength);
let bufferView = new Uint8Array (arrayBuffer);
let subArray = originalBufferView.subarray (this.position, this.position + byteLength);
bufferView.set (subArray, 0);
this.position += byteLength;
return arrayBuffer;
}
ReadBoolean8 ()
{
let result = this.dataView.getInt8 (this.position);
this.position = this.position + 1;
return result ? true : false;
}
ReadCharacter8 ()
{
let result = this.dataView.getInt8 (this.position);
this.position = this.position + 1;
return result;
}
ReadUnsignedCharacter8 ()
{
let result = this.dataView.getUint8 (this.position);
this.position = this.position + 1;
return result;
}
ReadInteger16 ()
{
let result = this.dataView.getInt16 (this.position, this.isLittleEndian);
this.position = this.position + 2;
return result;
}
ReadUnsignedInteger16 ()
{
let result = this.dataView.getUint16 (this.position, this.isLittleEndian);
this.position = this.position + 2;
return result;
}
ReadInteger32 ()
{
let result = this.dataView.getInt32 (this.position, this.isLittleEndian);
this.position = this.position + 4;
return result;
}
ReadUnsignedInteger32 ()
{
let result = this.dataView.getUint32 (this.position, this.isLittleEndian);
this.position = this.position + 4;
return result;
}
ReadFloat32 ()
{
let result = this.dataView.getFloat32 (this.position, this.isLittleEndian);
this.position = this.position + 4;
return result;
}
ReadDouble64 ()
{
let result = this.dataView.getFloat64 (this.position, this.isLittleEndian);
this.position = this.position + 8;
return result;
}
}