Signatur
Beschreibung
Uint16Array ist ein TypedArray und repräsentiert ein zusammenhängendes Speichersegment (ArrayBuffer), in dem jedes Element als vorzeichenloser 16-Bit-Integer (2 Byte) abgelegt wird. Gültige Werte liegen im Bereich 0 bis 65535. Werte außerhalb dieses Bereichs werden beim Schreiben modulo 65536 normiert (Wraparound).
Typische Einsatzgebiete sind Audioverarbeitung (PCM-Rohdaten), Bildverarbeitung (16-Bit-Farbkanäle), Binärprotokoll-Parsing sowie jede Situation, in der kompakter Speicher mit direktem Byte-Zugriff benötigt wird — z. B. in Kombination mit DataView, fetch-Streams oder WebSockets.
Alle TypedArray-Methoden stehen zur Verfügung: map(), filter(), reduce(), set(), subarray() u. v. m. Uint16Array-Instanzen teilen sich denselben ArrayBuffer mit anderen Views auf denselben Puffer, was Zero-Copy-Operationen ermöglicht.
Die Byte-Reihenfolge entspricht stets der nativen Byte-Reihenfolge der Plattform (meist Little-Endian). Wenn plattformunabhängige Byte-Reihenfolge benötigt wird (z. B. beim Netzwerk-Parsing), sollte stattdessen DataView verwendet werden, das explizites Endianness-Steuern erlaubt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $source | number | ArrayBuffer | SharedArrayBuffer | ArrayLike | Iterable | TypedArray | Initialisierungsquelle. Als number: Länge des Arrays (Anzahl Elemente). Als ArrayBuffer/SharedArrayBuffer: Puffer, auf den die View zeigt. Als ArrayLike oder Iterable: Werte werden kopiert und in Uint16 konvertiert. Als anderes TypedArray: Werte werden element-weise übernommen. |
|
| $byteOffset | number | 0 | Nur bei ArrayBuffer-Quelle: Byte-Offset innerhalb des Puffers, an dem die View beginnt. Muss ein Vielfaches von 2 sein. |
| $length | number | Nur bei ArrayBuffer-Quelle: Anzahl der Elemente in der View. Standardmäßig werden alle verbleibenden Bytes des Puffers verwendet. |
Rückgabewert
Uint16Array-Instanz, die auf einen ArrayBuffer zeigt.Beispiele
Array erstellen und Werte lesen/schreiben
// Leeres Uint16Array mit 4 Elementen anlegen
const arr = new Uint16Array(4);
arr[0] = 1000;
arr[1] = 65535; // Maximalwert
arr[2] = 65536; // Wraparound → 0
arr[3] = 300;
console.log(arr[0]); // 1000
console.log(arr[1]); // 65535
console.log(arr[2]); // 0 (Wraparound)
console.log(arr[3]); // 300
console.log(arr.byteLength); // 8 (4 × 2 Byte)
Aus Array-Literal und mit ArrayBuffer-View
// Aus einem normalen Array erzeugen
const from = Uint16Array.from([10, 20, 30, 40, 50]);
console.log(from.join(', ')); // 10, 20, 30, 40, 50
// Gemeinsamen ArrayBuffer mit zwei Views teilen
const buffer = new ArrayBuffer(8);
const view16 = new Uint16Array(buffer); // 4 Elemente à 2 Byte
const view8 = new Uint8Array(buffer); // 8 Elemente à 1 Byte
view16[0] = 0x0102;
console.log(view8[0], view8[1]); // Little-Endian: 2, 1
Binärdaten über fetch verarbeiten (Audio-Samples)
const loadSamples = async (url) => {
const response = await fetch(url);
const buffer = await response.arrayBuffer();
// Rohdaten als 16-Bit-PCM-Samples interpretieren
const samples = new Uint16Array(buffer);
const max = samples.reduce((m, v) => Math.max(m, v), 0);
console.log(`${samples.length} Samples, Max-Wert: ${max}`);
return samples;
};
// loadSamples('/audio/raw-pcm.bin');
subarray() – Zero-Copy-Slice
const data = new Uint16Array([100, 200, 300, 400, 500]);
// subarray teilt denselben Puffer (kein Kopieren!)
const slice = data.subarray(1, 4);
console.log([...slice]); // [200, 300, 400]
// Schreiben in slice ändert auch data
slice[0] = 999;
console.log(data[1]); // 999
// Wichtig · Fallstricke
Byte-Reihenfolge (Endianness): Uint16Array schreibt und liest Werte immer in der nativen Byte-Reihenfolge des Prozessors. Auf nahezu allen Desktop- und Mobilplattformen ist das Little-Endian. Beim Austausch über Netzwerk-Protokolle, die Big-Endian vorschreiben (z. B. Netzwerk-Byte-Reihenfolge), muss DataView mit explizitem getUint16(offset, false) verwendet werden.
Kein Sparse-Array: Anders als reguläre JS-Arrays hat Uint16Array eine feste Länge, die nach der Erstellung nicht geändert werden kann. push(), pop(), splice() und ähnliche mutierende Array-Methoden sind nicht verfügbar.
Negative Indizes: at(-1) wird unterstützt (ES2022), numerische negative Indices direkt (z. B. arr[-1]) hingegen nicht — sie legen stattdessen eine gewöhnliche Eigenschaft an, ohne den Puffer zu modifizieren.
SharedArrayBuffer: Uint16Array kann auf einem SharedArrayBuffer aufgebaut werden. In diesem Fall sind atomare Zugriffe über Atomics-Methoden erforderlich, um Race Conditions in Web Workers zu vermeiden.