【问题标题】:"RangeError: Invalid typed array length" for seemingly-valid inputs看似有效的输入的“RangeError:无效的类型化数组长度”
【发布时间】:2017-07-28 14:04:45
【问题描述】:

我有以下sn-p:

new Uint16Array( arraybuffer, 0, 18108 );

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

铬:

RangeError: 类型化数组长度无效

火狐:

TypeError: 无效参数

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

【问题讨论】:

    标签: javascript arraybuffer typed-arrays


    【解决方案1】:

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

    来自TypedArray docs:

    长度

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

    由于 Uint16Array.BYTES_PER_ELEMENT 为 2,因此数组缓冲区需要至少为 2 * 18108 字节长,但事实并非如此。

    【讨论】:

      猜你喜欢
      • 2019-11-29
      • 2020-01-31
      • 2019-08-19
      • 2016-12-18
      • 1970-01-01
      • 2018-12-28
      • 2021-10-05
      • 2019-03-28
      • 2016-12-19
      相关资源
      最近更新 更多