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.

Praxishinweis

Dieses Snippet passt gut, wenn dieselbe Operation oder Prüfung im Umfeld von TypeScript, JavaScript nicht immer wieder neu geschrieben werden soll. Als kleine Hilfsfunktion bleibt aufrufender Code leichter lesbar.

Wenn jedoch Verzweigungen und Voraussetzungen zunehmen, sollte nicht alles in ein einziges Snippet gepackt werden. Getrennte Schritte und klar abgegrenzte Helfer bleiben auf Dauer wartbarer.