"RangeError: Invalid typed array length" for seemingly-valid inputs
"RangeError: Invalid typed array length" for seemingly-valid inputs
我有以下片段:
new Uint16Array( arraybuffer, 0, 18108 );
我知道arraybuffer
是ArrayBuffer的一个实例,而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
字节长,而事实并非如此。
我有以下片段:
new Uint16Array( arraybuffer, 0, 18108 );
我知道arraybuffer
是ArrayBuffer的一个实例,而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
字节长,而事实并非如此。