bri*_*umn 5 javascript typedarray typed-arrays uint8array
我需要将 2 个现有 arrayBuffer 的 2 部分组合成一个新的。
我正在构建一个解析器,数据来自随机大小的数组缓冲区,数据将溢出一个解析器的末尾,进入另一个解析器的开头。因此,我需要创建一个新的输出缓冲区,并复制一个缓冲区末尾的一部分和另一个缓冲区开头的一部分。输出只是一个数组缓冲区。
从这个演示开始,我打算制作带有一些偏移量的 Uint8Arrays,然后使用 set,问题是某些组合会抛出异常Invalid typed array length。我事先不知道每个数组的长度或偏移量。
var buffer1 = new ArrayBuffer(8);
var buffer2 = new ArrayBuffer(8);
var buffer3 = new ArrayBuffer(8);
var uint8_1 = new Uint8Array(buffer1);
var uint8_2 = new Uint8Array(buffer2);
var uint8_3 = new Uint8Array(buffer3);
uint8_1.fill(1);
uint8_2.fill(2);
var uint8_1_slice = new Uint8Array(buffer1 , 0 , 3);
var uint8_2_slice = new Uint8Array(buffer2 , 4, 7);
Run Code Online (Sandbox Code Playgroud)
对于此演示,需要将 buffer3 设置为 1,1,1,1,2,2,2,2。
无法使用切片
对于此演示,需要将 buffer3 设置为 1,1,1,1,2,2,2,2。
您可以使用for循环,如果变量小于则设置uint8_3为值,否则设置为值。uint8_1nuint8_1.byteLength / 2uint8_3uint8_2
var len = 8;
var buffer1 = new ArrayBuffer(len);
var buffer2 = new ArrayBuffer(len);
var buffer3 = new ArrayBuffer(len);
var uint8_1 = new Uint8Array(buffer1);
var uint8_2 = new Uint8Array(buffer2);
var uint8_3 = new Uint8Array(buffer3);
uint8_1.fill(1);
uint8_2.fill(2);
// `len` : uint8_1.byteLength / 2 + uint8_2.byteLength / 2
for (var n = 0; n < len; n++) {
uint8_3[n] = n < len / 2 ? uint8_1[n] : uint8_2[n];
}
console.log(uint8_3);Run Code Online (Sandbox Code Playgroud)