use*_*750 29 javascript typed-arrays arraybuffer
添加/组合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;
}
Run Code Online (Sandbox Code Playgroud)
显然你不能不得不创建一个新的缓冲区,因为ArrayBuffers的长度是固定的,但是有必要初始化类型化的数组吗?到达后我只想要能够将缓冲区视为缓冲区; 类型和结构无关紧要.
为什么不使用Blob?(我意识到当时可能还没有).
只需使用您的数据创建Blob,var blob = new Blob([array1,array2,string,...])然后使用FileReader将其转换回ArrayBuffer(如果需要)(请参阅此内容).
检查一下:BlobBuilder和新的Blob构造函数有什么区别? 这个:MDN Blob API
编辑:
我想比较这两种方法(Blob和问题中使用的方法)的效率并创建一个JSPerf:http://jsperf.com/appending-arraybuffers
似乎使用Blob更慢(事实上,我猜这是使用Filereader来读取花费最多时间的Blob).所以现在你知道;)当有超过2个ArrayBuffer(比如从它的块中重建文件)时,它可能会更有效率.
小智 -3
您始终可以使用DataView(http://www.khronos.org/registry/typedarray/specs/latest/#8)而不是特定的类型数组,但正如您的问题的评论中所提到的,您实际上不能ArrayBuffer自己做很多事情。
| 归档时间: |
|
| 查看次数: |
23603 次 |
| 最近记录: |