"RangeError: Invalid typed array length" for seemingly-valid inputs

"RangeError: Invalid typed array length" for seemingly-valid inputs

我有以下片段:

new Uint16Array( arraybuffer, 0, 18108 );

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

Chrome:

RangeError: Invalid typed array length

火狐:

TypeError: invalid arguments

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

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

来自 TypedArray 文档:

length

When called with a length argument, an internal array buffer is created in memory of size length multiplied by BYTES_PER_ELEMENT bytes containing 0 value.

因为 Uint16Array.BYTES_PER_ELEMENT 是 2,arraybuffer 需要至少 2 * 18108 字节长,而事实并非如此。