-
-
Save 72lions/4528834 to your computer and use it in GitHub Desktop.
/** | |
* Creates a new Uint8Array based on two different ArrayBuffers | |
* | |
* @private | |
* @param {ArrayBuffers} buffer1 The first buffer. | |
* @param {ArrayBuffers} buffer2 The second buffer. | |
* @return {ArrayBuffers} The new ArrayBuffer created out of the two. | |
*/ | |
var _appendBuffer = function(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; | |
}; |
Krashdrive
commented
May 3, 2021
Literally saved my day. Best solution for performance
const concatenated = await new Blob([ buffer, buffer2 ]).arrayBuffer()
I like Krashdrive's solution, simple and works flawlessly!
Thanks :)
function concatArrayBuffers(...bufs){ const result = new Uint8Array(bufs.reduce((totalSize, buf)=>totalSize+buf.byteLength,0)); bufs.reduce((offset, buf)=>{ result.set(buf,offset) return offset+buf.byteLength },0) return result.buffer }
i meet error: Uncaught RangeError: offset is out of bounds
@fujinxiang Works well for me here -> https://jsfiddle.net/fhsn0zg9/10/
Best create fiddle to demo what you mean? :)
function concatArrayBuffers(...bufs){ const result = new Uint8Array(bufs.reduce((totalSize, buf)=>totalSize+buf.byteLength,0)); bufs.reduce((offset, buf)=>{ result.set(buf,offset) return offset+buf.byteLength },0) return result.buffer }
i meet error: Uncaught RangeError: offset is out of bounds
I am also getting error, "RangeError: offset is out of bounds".
👍
@rashmimhatre100 I am curious now :) Would you mind create a fiddle, and could you take a look at https://jsfiddle.net/fhsn0zg9/10/ ?
@fujinxiang
EDIT: realized you'd need to use this above func with Uint8Array
wrapped inputs. That is a bit misleading, but the output will be a brand new allocated ArrayBuffer. See the example code on the fiddle.