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 ignoriertImplementierungsdetails
- Zuerst die Gesamtbytelänge aller Arrays mit reduce berechnen
- Ein neues Uint8Array dieser Größe allozieren
- Jedes Array sequentiell mit der set-Methode schreiben
- 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.
hsb.horse