" RangeError:无效的类型化数组长度"看似有效的投入

时间:2017-03-08 05:54:54

标签: javascript arraybuffer typed-arrays

我有以下代码段:

new Uint16Array( arraybuffer, 0, 18108 );

我知道arraybufferArrayBuffer的一个实例,而arraybuffer.byteLength是31984. arraybuffer的内容对我来说是一个黑盒子。因为缓冲区的byteLength是> 18108,我希望这只是工作。相反,我得到以下错误:

铬:

  

RangeError:无效的类型化数组长度

火狐:

  

TypeError:无效参数

可能导致此失败的原因,或者我如何检查无法打开的ArrayBuffer?

1 个答案:

答案 0 :(得分:4)

好吧,我误解了TypedArray / Uint16Array构造函数。第二个参数是byteOffset,但第三个参数是字节长度:它是元素中的长度。

来自TypedArray docs:

  

<强>长度

     

当使用长度参数调用时,会在内存中创建一个内部数组缓冲区,其大小长度乘以包含0值的BYTES_PER_ELEMENT个字节。

由于Uint16Array.BYTES_PER_ELEMENT为2,因此数组缓冲区长度必须至少为2 * 18108个字节,而不是。{/ p>