logo hsb.horse
← Zur Snippets-Übersicht

Snippets

Uint8Arrays zusammenführen

Eine TypeScript-Funktion zum Zusammenführen mehrerer Uint8Arrays in eines. Nützlich für die Kombination von Binärdaten.

Veröffentlicht: Aktualisiert:

Bei der Arbeit mit Binärdaten gibt es Situationen, in denen man mehrere Uint8Arrays zu einem zusammenführen möchte. Zum Beispiel beim Wiederzusammensetzen von Chunks, die aus einem aufgeteilten Datei-Upload empfangen wurden.

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

Verwendungsbeispiele

Mehrere Arrays zusammenführen

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]

Leere Arrays verarbeiten

const merged = mergeU8Array(new Uint8Array(), part1);
// Leere Arrays werden beim Zusammenführen ignoriert

Implementierungsdetails

  1. Zuerst die Gesamtbytelänge aller Arrays mit reduce berechnen
  2. Ein neues Uint8Array dieser Größe allozieren
  3. Jedes Array sequentiell mit der set-Methode schreiben
  4. Die Position durch Vorrücken des Offsets verwalten

Obwohl wir Nebeneffekte innerhalb von reduce durchführen, verwenden wir die set-Methode, die Byte-kopien vermeidet, was diese Implementierung relativ effizient macht.