我有以下代码段:
new Uint16Array( arraybuffer, 0, 18108 );
我知道arraybuffer
是ArrayBuffer的一个实例,而arraybuffer.byteLength
是31984. arraybuffer的内容对我来说是一个黑盒子。因为缓冲区的byteLength是> 18108,我希望这只是工作。相反,我得到以下错误:
铬:
RangeError:无效的类型化数组长度
火狐:
TypeError:无效参数
可能导致此失败的原因,或者我如何检查无法打开的ArrayBuffer?
答案 0 :(得分:4)
好吧,我误解了TypedArray / Uint16Array构造函数。第二个参数是byteOffset
,但第三个参数是不字节长度:它是元素中的长度。
来自TypedArray docs:
<强>长度强>
当使用长度参数调用时,会在内存中创建一个内部数组缓冲区,其大小长度乘以包含0值的BYTES_PER_ELEMENT个字节。
由于Uint16Array.BYTES_PER_ELEMENT
为2,因此数组缓冲区长度必须至少为2 * 18108
个字节,而不是。{/ p>