追加 ArrayBuffer

2024-02-12

附加/组合 ArrayBuffer 的最佳方式是什么?

我正在接收和解析具有各种数据结构的网络数据包。传入的消息被读入 ArrayBuffer。如果部分数据包到达,我需要存储它并等待下一条消息,然后重新尝试解析它。

目前我正在做这样的事情:

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 的长度是固定的,因此您无法避免创建新的缓冲区,但是是否有必要初始化类型化数组?到达后,我只想能够将缓冲区视为缓冲区;类型和结构无关紧要。


为什么不使用 Blob ? (我意识到当时可能不可用)。

只需使用您的数据创建一个 Blob,例如var blob = new Blob([array1,array2,string,...])并使用 FileReader 将其转回 ArrayBuffer(如果需要)(请参阅this https://stackoverflow.com/questions/15341912/javascript-how-to-go-from-blob-to-arraybuffer).

检查一下:BlobBuilder 和新的 Blob 构造函数有什么区别? https://stackoverflow.com/questions/10412299/whats-the-difference-between-blobbuilder-and-the-new-blob-constructor和这个 :MDN 斑点 API https://developer.mozilla.org/en-US/docs/Web/API/Blob

EDIT :

我想比较这两种方法(Blob 和问题中使用的方法)的效率并创建了一个 JSPerf :http://jsperf.com/appending-arraybuffers http://jsperf.com/appending-arraybuffers

看起来使用Blobs比较慢(事实上,我猜是使用Filereader读取Blob最耗时)。所以现在你知道了;) 当有超过 2 个 ArrayBuffer 时(比如从文件的块中重建文件),也许它会更有效率。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

追加 ArrayBuffer 的相关文章