也许是时候晚了,或者是缘故,但我只是阅读了ArrayBuffer的文档,无法想到它真正有用的任何东西。
有人可以启发我吗?
有没有人能想到的不涉及图像的用途?
getImageData返回绘制图像的许多属性的方法,包括一种称为buffer类型的属性ArrayBuffer
Answers:
基本上,ArrayBuffer用于保留二进制数据。例如,它可以是图像的二进制数据。
在其他语言中,缓冲区被证明非常有用。是的,当然,与其他数据类型相比,几乎不难理解/使用。
ArrayBuffer可用于获取jpg图像(RGB字节)的数据,并通过添加alpha字节(即RGBA)从中产生png。
Mozilla站点在此处仅少量使用了ArrayBuffer
处理复杂的数据结构
通过将单个缓冲区与不同类型的多个视图组合在一起(从缓冲区的不同偏移量开始),您可以与包含多种数据类型的数据对象进行交互。例如,这使您可以与使用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]。注意: C结构中的数据结构对齐方式取决于平台。请注意这些填充差异的注意事项和注意事项。
new Int32Array(Uint8Array.from([1,2,3,4]).buffer,0,1)测试。
AnArrayBuffer代表RAM中的二进制数据。您可以ArrayBuffer使用类型化数组或来“打开” an进行读写DataView。
类型化的数组(例如Uint16Array)可以通过将缓冲区视为单个整数数组来读取和写入缓冲区。它们不让您控制字节顺序;它使用平台的本地字节序。使用Uint8Array对于控制单个字节很有用(不受字节序的影响)。
DataView并不是那么简单,但是它给了您更多的控制权。它使您可以完全控制字节序,整数大小和字节索引(例如,即使不能被32位整除,也可以在索引处访问32位整数)。每次您读写具有相同整数的整数时,都可以选择这些东西DataView。
这可能会有所帮助:https : //javascript.info/arraybuffer-binary-arrays