90

也许它已经晚了,或者也许是为了,但我只是阅读了ArrayBuffer的文档并且想不出任何它会真正有用的东西。

有人可以启发我吗?

有没有任何人能想到的不涉及图像的用途?

4

3 回答 3

73

基本上 ArrayBuffer 用于保存二进制数据。例如,它可以是图像的二进制数据。

在其他语言中,缓冲区被证明非常有用。是的,当然它比其他数据类型更难理解/使用。

ArrayBuffer 可用于获取jpg 图像(RGB 字节)的数据,并通过添加alpha 字节(即RGBA)从中生成一个png。

Mozilla 网站在这里对 ArrayBuffer 进行了少量使用

处理复杂的数据结构

通过将单个缓冲区与不同类型的多个视图组合,从缓冲区的不同偏移量开始,您可以与包含多种数据类型的数据对象进行交互。例如,这使您可以与来自WebGL的复杂数据结构、数据文件或您在使用js-ctypes时需要使用的 C 结构进行交互。

考虑这个 C 结构:

struct someStruct {  
  unsigned long id;  
  char username[16];  
  float amountDue;  
};  

您可以访问包含这种格式的数据的缓冲区,如下所示:

var buffer = new ArrayBuffer(24);  

// ... read the data into the buffer ...  

var idView = new Uint32Array(buffer, 0, 1);  
var usernameView = new Uint8Array(buffer, 4, 16);  
var amountDueView = new Float32Array(buffer, 20, 1);  

然后,您可以访问,例如,到期金额 amountDueView[0]

注意: C 结构中的数据结构对齐是平台相关的。对这些填充差异采取预防措施和注意事项。

于 2012-07-19T06:25:21.267 回答
9

AnArrayBuffer是 RAM 中的一大块二进制数据。有几种方法可以“打开”ArrayBuffer阅读和写作:

  • 类型化数组,例如Uint16Array,可以通过将缓冲区视为整数数组来读取和写入缓冲区。他们不允许你控制字节顺序;它使用 CPU 的首选字节序。Uint8Array对于控制单个字节(复制、切片等)很有用。

  • DataView不是那么简单,但它给了你更多的控制权。它允许您选择字节顺序、整数大小和字节索引(例如,您可以在不能被 32 位整除的索引处访问 32 位整数)。这些东西可以在你每次读写一个整数时指定DataView

更多信息:https ://javascript.info/arraybuffer-binary-arrays

于 2020-07-30T06:25:15.140 回答
7

除了图像之外,它还可以用于精确构造和破坏 UDP 等协议中使用的低级网络数据包。

于 2019-08-18T03:03:25.070 回答