Don*_*rdy 3 javascript typed-arrays arraybuffer
我有以下片段:
new Uint16Array( arraybuffer, 0, 18108 );
Run Code Online (Sandbox Code Playgroud)
我知道,arraybuffer是的一个实例ArrayBuffer,那arraybuffer.byteLength是31984.该arraybuffer的内容是一个黑盒子给我。因为缓冲区的byteLength> 18108,所以我希望它能正常工作。相反,我得到以下错误:
铬:
RangeError:无效的类型化数组长度
Firefox:
TypeError:无效的参数
是什么原因导致失败,或者如何检查无法打开的ArrayBuffer?
好吧,我误解了TypedArray / Uint16Array构造函数。第二个参数是a byteOffset,但第三个参数不是字节长度:它是元素长度。
来自TypedArray文档:
长度
当使用length参数调用时,将在大小为长度乘以包含0值的BYTES_PER_ELEMENT字节的内存中创建内部数组缓冲区。
由于Uint16Array.BYTES_PER_ELEMENT为2,因此arraybuffer的长度至少应为2 * 18108字节长,而实际上不是。