如何从ArrayBuffer获取数组?

del*_*lux 3 javascript arrays typed-arrays arraybuffer

我有一个ArrayBuffer看起来像: 在此处输入图片说明

该缓冲区放置在名为的变量下,myBuffer而我感兴趣的是Uint8Array从此对象获取。

我试图循环为:

myBuffer.forEach(function(element) {
    console.log(element);
});
Run Code Online (Sandbox Code Playgroud)

并通过以下方式直接访问数组:

console.log(myBuffer['[[Uint8Array]]']);
console.log(myBuffer['Uint8Array']);
Run Code Online (Sandbox Code Playgroud)

但是似乎这都不是正确的方法

Rob*_*der 9

您首先需要将数组缓冲区转换为类型化数组,然后从那里您可以使用扩展运算符创建一个数组

const typedArray = new Uint8Array(myBuffer);
const array = [...typedArray];
Run Code Online (Sandbox Code Playgroud)

  • 最好用`Array.from(typedArray)`,目的更明确 (10认同)
  • 任何想知道为什么需要这样做的人都必须将类型化数组(即 Uint8array)转换为 Array 对象。类型化数组不是 javascript 中的数组。请参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays (2认同)

Ale*_*ara 6

您所看到的那些伪属性是开发者控制台为您带来的好处。作为属性或符号(AFAIK),它们根本不存在,即使它们是非标准的。

您可以Uint8Array像这样通过标准方式轻松查看缓冲区的视图:

new Uint8Array(myBuffer)
Run Code Online (Sandbox Code Playgroud)