javascript ArrayBuffer,它的用途是什么?

时间:2012-07-19 04:34:33

标签: javascript

也许已经很晚了,或者也许是为了这个缘故,但我只是阅读了ArrayBuffer的文档而无法想到它会对它有用的一件事。

有人可以启发我吗?

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

3 个答案:

答案 0 :(得分:44)

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

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

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

Mozilla网站已经少量使用了ArrayBuffer here

向下滚动以查找Working with complex data structures

部分

我从那里复制了文字:

使用复杂的数据结构

通过将单个缓冲区与不同类型的多个视图组合,从不同的偏移量开始,您可以与包含多种数据类型的数据对象进行交互。例如,这使您可以在使用js-ctypes时与WebGL,数据文件或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]访问应付金额。

答案 1 :(得分:3)

ArrayBuffer代表RAM中的二进制数据。您可以使用类型化数组或ArrayBuffer“打开” DataView进行读写。

Typed arrays,例如Uint16Array,可以通过将缓冲区视为单个整数数组来读取和写入缓冲区。他们不允许您控制endianness;它使用平台的本地字节序。使用Uint8Array对于控制单个字节非常有用(这不受字节顺序的影响)。

DataView并不那么简单,但是它为您提供了更多的控制权。它使您可以完全控制字节顺序,整数大小和字节索引(例如,即使不能被32位整除,也可以在索引处访问32位整数)。每次您使用相同的DataView读写整数时,都可以选择这些东西。

这可能会有所帮助:https://javascript.info/arraybuffer-binary-arrays

答案 2 :(得分:0)

除图像外,它对于精确构建和销毁UDP等协议中使用的低级网络数据包很有用。