TypedArray in JavaScript
Dieser Artikel erklärt TypedArray
in JavaScript.
Wir werden das grundlegende Konzept von TypedArray
, die einzelnen Typen, deren Verwendung und spezifische Anwendungsfälle im Detail erklären.
YouTube Video
TypedArray in JavaScript
TypedArray
in JavaScript ist ein Objekt zur effizienten Verarbeitung von gepufferten Binärdaten. TypedArray
weist Speicher basierend auf spezifischen Datentypen zu und manipuliert diesen. Im Gegensatz zu regulären Arrays kann TypedArray
nur Binärdaten fester Größe enthalten und keine beliebigen Datentypen.
Die Grundstruktur von TypedArray
Die Hauptbestandteile eines TypedArray
sind der ArrayBuffer
und das TypedArray
selbst.
- ArrayBuffer: Ein Puffer mit fester Größe, der Binärdaten im Speicher zuweist. Dieser Puffer ist lediglich ein Datenbereich und kann nicht direkt gelesen oder beschrieben werden.
- TypedArray: Ein Wrapper-Objekt, das einen bestimmten Datentyp auf den Puffer anwendet und den Datenzugriff und die Datenmanipulation ermöglicht.
Grundlegendes Anwendungsbeispiel
Das Folgende ist ein Beispiel für die Erstellung eines ArrayBuffer
und die anschließende Erstellung eines TypedArray
darauf basierend.
1// Create a 16-byte buffer
2const buffer = new ArrayBuffer(16);
3
4// Create a TypedArray (Uint8Array) to handle 8-bit unsigned integers
5const uint8Array = new Uint8Array(buffer);
6
7// Set data
8uint8Array[0] = 255;
9uint8Array[1] = 128;
10
11// Retrieve data
12console.log(uint8Array[0]); // 255
13console.log(uint8Array[1]); // 128
- In diesem Beispiel wird ein
ArrayBuffer
erstellt und anschließend einUint8Array
darauf basierend erzeugt. Jedes Element wird als 8-Bit-Integer ohne Vorzeichen behandelt und speichert Werte nur innerhalb des angegebenen Bereichs.
Arten von TypedArray
Es gibt verschiedene Typen von TypedArray
für jeden Datentyp. Die wichtigsten sind wie folgt.
Typname | Größe des Elements | Beschreibung |
---|---|---|
Int8Array |
1 Byte | 8-Bit vorzeichenbehafteter Integer |
Uint8Array |
1 Byte | 8-Bit vorzeichenloser Integer |
Uint8ClampedArray |
1 Byte | 8-Bit vorzeichenloser Integer (enthält geklemmte Werte) |
Int16Array |
2 Bytes | 16-Bit vorzeichenbehafteter Integer |
Uint16Array |
2 Bytes | 16-Bit vorzeichenloser Integer |
Int32Array |
4 Bytes | 32-Bit vorzeichenbehafteter Integer |
Uint32Array |
4 Bytes | 32-Bit vorzeichenloser Integer |
Float32Array |
4 Bytes | 32-Bit Gleitkommazahl |
Float64Array |
8 Bytes | 64-Bit Gleitkommazahl |
Diese TypedArrays
sind speichereffizient und eignen sich hervorragend für die Verarbeitung großer Datenmengen.
Manipulation von TypedArrays
Auf Daten in einem TypedArray
kann mit Indizes wie bei einem normalen Array zugegriffen werden, jedoch stehen auch mehrere spezielle Methoden zur Verfügung.
Werte setzen
In einem TypedArray
können Sie mit der Methode set
mehrere Werte gleichzeitig zuweisen.
1const buffer = new ArrayBuffer(8);
2const int16Array = new Int16Array(buffer);
3
4// Set values
5int16Array.set([10, 20, 30]);
6
7console.log(int16Array[0]); // 10
8console.log(int16Array[1]); // 20
9console.log(int16Array[2]); // 30
- Dieser Code verwendet die Methode
set
, um mehreren Werten gleichzeitig einerInt16Array
zuzuweisen, und zeigt jedes Element in der Konsole an.
Ein Teilarray abrufen
Um einen Teil eines TypedArray
als Subarray zu erhalten, verwenden Sie die Methode subarray
. Dies verweist auf denselben Puffer wie das ursprüngliche TypedArray
.
1const int16Array = new Int16Array([1, 2, 3, 4, 5]);
2
3// Get a subarray containing elements from the 2nd to the 4th
4const subArray = int16Array.subarray(1, 4);
5
6console.log(subArray); // Int16Array [2, 3, 4]
- Dieser Code ruft einen bestimmten Bereich von Elementen aus einer
Int16Array
mit der Methodesubarray
ab und zeigt das Subarray in der Konsole an.
Puffer kopieren
Der Puffer eines TypedArray
kann auch in ein anderes TypedArray
kopiert werden. Mit der Methode set
können Sie ab einer bestimmten Position kopieren.
1const srcArray = new Uint8Array([10, 20, 30, 40]);
2const destArray = new Uint8Array(4);
3
4// Copy
5destArray.set(srcArray);
6
7console.log(destArray); // Uint8Array [10, 20, 30, 40]
- Dieser Code kopiert den Inhalt eines
Uint8Array
mit der Methodeset
in ein anderes Array und zeigt das kopierte Array in der Konsole an.
DataView
verwenden
Während ein TypedArray
Puffer mit einem festen Datentyp verarbeitet, ist DataView
eine Schnittstelle, die eine flexible Bearbeitung binärer Daten mit beliebigen Offsets und Datentypen ermöglicht. Dadurch können verschiedene Typen im selben Puffer gemischt werden.
1const buffer = new ArrayBuffer(8);
2const dataView = new DataView(buffer);
3
4// Write a 32-bit signed integer at offset 0
5dataView.setInt32(0, 12345);
6
7// Write a 32-bit floating-point number at offset 4
8dataView.setFloat32(4, 12.34);
9
10console.log(dataView.getInt32(0)); // 12345
11console.log(dataView.getFloat32(4)); // 12.34000015258789
-
Dieser Code verwendet ein
DataView
, um verschiedene Datentypen – 32-Bit-Ganzzahlen und 32-Bit-Gleitkommazahlen – im selben Puffer zu schreiben und überprüft die Ergebnisse. -
DataView
bietet mehr Flexibilität beim Datenzugriff alsTypedArray
und ist besonders nützlich bei der Arbeit mit Dateien im Binärformat oder Netzwerkprotokollen.
Anwendungsfälle von TypedArray
TypedArray
wird hauptsächlich für die effiziente Verarbeitung großer Mengen binärer Daten verwendet. Zu den konkreten Anwendungsfällen gehören die folgenden:.
Bildverarbeitung
TypedArray
wird bei der Bearbeitung von Pixelinformationen von Bilddaten verwendet. Mit einem Uint8Array
können Sie die RGBA-Werte jedes Pixels speichern und Bildbearbeitungs- und Verarbeitungsaufgaben durchführen.
1const width = 100;
2const height = 100;
3const imageData = new Uint8Array(width * height * 4); // RGBA
4
5// Set pixel data
6for (let i = 0; i < imageData.length; i += 4) {
7 imageData[i] = 255; // Red
8 imageData[i + 1] = 0; // Green
9 imageData[i + 2] = 0; // Blue
10 imageData[i + 3] = 255; // Alpha
11}
- Dieser Code erstellt Bilddaten mit einer Breite von 100 und einer Höhe von 100 im RGBA-Format mithilfe eines
Uint8Array
und setzt alle Pixel auf Rot.
Schnittstelle zu WebAssembly
TypedArray
wird für den Austausch von Binärdaten zwischen JavaScript und WebAssembly verwendet. Durch das Teilen des Speicherbereichs von JavaScript und WebAssembly mittels ArrayBuffer
ist ein schneller Datenaustausch möglich.
Bearbeitung von Audio- und Videodaten
TypedArray
spielt eine wichtige Rolle bei der Verarbeitung von Audio und Video. Sie können Audiowellenformen in einem Float32Array
speichern, um Wiedergabe und Verarbeitung durchzuführen.
Fazit
TypedArray
ist ein leistungsstarkes Werkzeug zur effizienten Verarbeitung großer Mengen an Binärdaten. Es ist besonders nützlich in leistungsrelevanten Anwendungen wie der Bildverarbeitung, WebAssembly und der Audio-/Videoverarbeitung. TypedArray
hat eine API, die normalen Arrays ähnelt, jedoch gibt es Einschränkungen bezüglich Speicherverbrauch und Datentypen, sodass eine korrekte Differenzierung in der Verwendung erforderlich ist.
Sie können den obigen Artikel mit Visual Studio Code auf unserem YouTube-Kanal verfolgen. Bitte schauen Sie sich auch den YouTube-Kanal an.