logo hsb.horse
← Voltar para o índice de snippets

Snippets

Mesclar Uint8Arrays

Uma função TypeScript para mesclar múltiplos Uint8Arrays em um. Útil para combinar dados binários.

Publicado: Atualizado:

Ao trabalhar com dados binários, há momentos em que você deseja combinar vários Uint8Arrays em um. Por exemplo, ao remontar chunks recebidos de um upload de arquivo dividido.

Código

function mergeU8Array(...arrays: Uint8Array[]): Uint8Array {
const total = arrays.reduce((acc, cur) => acc + cur.byteLength, 0);
let offset = 0;
return arrays.reduce<Uint8Array>((acc, cur) => {
acc.set(cur, offset);
offset += cur.byteLength;
return acc;
}, new Uint8Array(total));
}

Exemplos de Uso

Mesclar múltiplos arrays

const part1 = new Uint8Array([1, 2, 3]);
const part2 = new Uint8Array([4, 5, 6]);
const part3 = new Uint8Array([7, 8, 9]);
const merged = mergeU8Array(part1, part2, part3);
// Uint8Array(9) [1, 2, 3, 4, 5, 6, 7, 8, 9]

Lidar com arrays vazios

const merged = mergeU8Array(new Uint8Array(), part1);
// Arrays vazios são ignorados durante a mesclagem

Detalhes da Implementação

  1. Primeiro, calcular o comprimento total em bytes de todos os arrays usando reduce
  2. Alocar um novo Uint8Array desse tamanho
  3. Escrever cada array sequencialmente usando o método set
  4. Gerenciar a posição avançando o offset

Embora estejamos realizando efeitos colaterais dentro do reduce, usamos o método set que evita cópia em nível de byte, tornando esta uma implementação relativamente eficiente.