logo hsb.horse
← Retour à l’index des snippets

Snippets

Fusionner des Uint8Array

Une fonction TypeScript pour fusionner plusieurs Uint8Array en un seul. Utile pour combiner des données binaires.

Publié: Mis à jour:

Lorsque vous travaillez avec des données binaires, il arrive que vous souhaitiez combiner plusieurs Uint8Array en un seul. Par exemple, lors de la reconstitution de morceaux reçus d’un téléchargement de fichier fragmenté.

Code

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));
}

Exemples d’utilisation

Fusionner plusieurs tableaux

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]

Gérer les tableaux vides

const merged = mergeU8Array(new Uint8Array(), part1);
// Les tableaux vides sont ignorés lors de la fusion

Détails de l’implémentation

  1. D’abord, calculer la longueur totale en octets de tous les tableaux avec reduce
  2. Allouer un nouveau Uint8Array de cette taille
  3. Écrire chaque tableau séquentiellement avec la méthode set
  4. Gérer la position en avançant le offset

Bien que nous effectuions des effets secondaires dans reduce, nous utilisons la méthode set qui évite la copie au niveau des octets, ce qui rend l’implémentation relativement efficace.