答案 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
读写整数时,都可以选择这些东西。
答案 2 :(得分:0)
除图像外,它对于精确构建和销毁UDP等协议中使用的低级网络数据包很有用。