什么是将ArrayBuffers拼接/合并的首选方法?
我正在接收和解析各种数据结构的网络数据包。传入的消息被读入ArrayBuffers。如果部分数据包到达,我需要将其存储并等待下一条消息再次尝试解析它。
目前,我正在做类似于以下方式的事情:
function appendBuffer( buffer1, buffer2 ) {
var tmp = new Uint8Array( buffer1.byteLength + buffer2.byteLength );
tmp.set( new Uint8Array( buffer1 ), 0 );
tmp.set( new Uint8Array( buffer2 ), buffer1.byteLength );
return tmp.buffer;
}
很明显,由于ArrayBuffer是固定长度的,因此无法避免创建新缓冲区,但初始化typed arrays是否必要?我只是想将缓冲区视为缓冲区来处理;类型和结构并不重要。
ArrayBuffer
的.slice
方法,这样做的效果有限。然后你可以使用BlobBuilder
的.append
方法,但这比你现在做的要复杂得多。你当前的方法有什么实际问题吗? - EsailijaArrayBuffer
都有固定的大小,因此复制数据是唯一的方法。您想使用本地代码进行复制,而不是Javascript循环,因此Uint8Array.set
是您最好的选择 - 它可以检测其参数是否为另一个Uint8Array
并执行高速C风格的memcpy
。因此,您的原始代码示例几乎是最快且最简单的 -ArrayBuffer
类没有有用的方法,因为其设计者预计类型化数组将是主要接口。出于这个原因,我更喜欢将Uint8Array
用于“原始数据”,而不是ArrayBuffer
。 - William Swanson