Byte-Array in JavaScript speichern

Migel Hewage Nimesha 15 Februar 2024
  1. das ArrayBuffer-Objekt in JavaScript
  2. die typisierten Array-Ansichten
  3. Manipulieren von ArrayBuffer mit typisierten Array-Ansichten in JavaScript
Byte-Array in JavaScript speichern

In diesem Artikel wird erläutert, wie Byte-Arrays in JavaScript gespeichert werden.

das ArrayBuffer-Objekt in JavaScript

Ein Array von Bytes oder ein Byte-Array ist in JavaScript als das ArrayBuffer-Objekt bekannt. Der ArrayBuffer wird nicht von JavaScript-Arrays abgeleitet und hat eine feste Länge im Speicher, die nicht geändert werden kann.

Außerdem können Sie nicht direkt auf Elemente im ArrayBuffer-Objekt zugreifen, wie wir es in üblichen JavaScript-Arrays tun. Es benötigt ein separates Ansichtsobjekt zum Lesen/Schreiben.

Syntax:

new ArrayBuffer(length_in_bytes);

Der obige Code ruft den ArrayBuffer-Konstruktor auf, um eine neue ArrayBuffer-Instanz mit der angegebenen Bytelänge zu erstellen.

Lassen Sie uns einen ArrayBuuffer mit einer Länge von 8 Bytes erstellen.

let myTypedArrayBuffer = new ArrayBuffer(8);

Idealerweise sollte der obige Code einen neuen ArrayBuffer mit der Grösse von 8 Bytes erzeugen. Nun überprüfen wir die Eigenschaft byteLength des erstellten ArrayBuffer-Objekts myTypedArrayBuffer.

Code:

console.log(myTypedArrayBuffer.byteLength);

Ausgang:

Überprüfe die Bytelänge eines Arrays

Die Länge des Puffers beträgt erwartungsgemäß 8 Byte. Es weist 8 Bytes im Speicher zu, wobei jedes Byte Null zugeordnet ist.

Dieser Puffer bietet keinen Mechanismus zum Manipulieren seiner Bytes. Daher müssen wir ein typisiertes Array-View-Objekt verwenden, um in den ArrayBuffer zu lesen/schreiben.

die typisierten Array-Ansichten

Typisierte Array-Ansichten sind wie verschiedene Linsen, die eine Erklärung des Byte-Arrays liefern, insbesondere des im Speicher gespeicherten ArrayBuffer. Diese Ansichten unterstützen numerische Typen wie Ganzzahlen mit und ohne Vorzeichen sowie Gleitkommazahlen.

Die folgenden Ansichten wurden implementiert, um das Objekt ArrayBuffer zu manipulieren.

Typ Beschreibung
Uint8Array Diese Ansicht manipuliert die ArrayBuffer-Bytes so, dass jedes Byte eine separate Ganzzahl ist. Da ein Byte 8 Bits enthält, können 255 vorzeichenlose Ganzzahlen dargestellt werden, und der Ganzzahlbereich reicht von 0 bis 255.
Uint16Array Diese Ansicht dient ArrayBuffer, da alle 2 Bytes im Puffer eine ganze Zahl sind, die von 0 bis 65535 reicht. Alle ganzen Zahlen sind vorzeichenlos.
Uint32Array Alle 4 Bytes im ArrayBuffer werden als Integer betrachtet. Daher kann diese Ansicht mehr als 4 Milliarden unsignierte Nummern speichern.
Float64Array Das Float64Array kann alle 8 Bytes im Puffer als Ganzzahl interpretieren.

Wie Sie sehen können, ermöglichen Ihnen verschiedene Ansichten, binäre Daten im ArrayBuffer als unterschiedliche Zahlenformate zu interpretieren.

Manipulieren von ArrayBuffer mit typisierten Array-Ansichten in JavaScript

Alle oben erwähnten typisierten Array-Ansichten folgen denselben Konstruktormustern, wie im Folgenden gezeigt.

new TypedArray(buffer);              // provides and ArrayBuffer type object
new TypedArray(array_object);        // provides an array-like object
new TypedArray(number_of_elements);  // provides the number of integers to be in
                                     // the typed array
new TypedArray(another_typed_array);  // provides and ArrayBuffer type object
new TypedArray();

Es gibt keinen eigentlichen TypedArray()-Konstruktor in JavaScript. Es wird einer der View-Konstruktoren wie new Uint8Array(), new Float64Array() sein.

Lassen Sie uns aus dem vorherigen Beispiel eine neue Ansicht Uint8Array erstellen, um den bereits erstellten ArrayBuffer(myTypedArrayBuffer) zu manipulieren.

Code:

let unsigned8BitIntView = new Uint8Array(myTypedArrayBuffer);
console.log(unsigned8BitIntView);

Ausgang:

Neues Uint8Array erstellen, um ArrayBuffer zu manipulieren

Das typisierte Array-Objekt Uint8Array wurde erstellt, wobei alle Bytes mit dem Wert 0 gefüllt sind.

Sehen wir uns die Länge und tatsächliche Bytelänge dieses Ansichtsobjekts an. Beide sollten 8 sein.

Code:

console.log(
    'Length of the view: ' + unsigned8BitIntView.length +
    '.... Byte length of the view: ' + unsigned8BitIntView.byteLength);

Wir haben die Eigenschaften length und byteLength in der Ansicht Uint8Array verwendet, um die beiden obigen Werte zu erhalten.

Ausgang:

Überprüfen Sie die tatsächliche Bytelänge des Ansichtsobjekts

Lassen Sie uns einen Wert in den Speicherpuffer schreiben.

unsigned8BitIntView[0] = 200;

Jetzt können wir das Objekt unsigned8BitIntView untersuchen, indem wir jedes Element iterieren.

Code:

for (let value of unsigned8BitIntView) {
  console.log(value);
}

Ausgang:

Wert in den Speicherpuffer schreiben

Überprüfen Sie das unsigned8BitIntView-Objekt mithilfe der Schleifenanweisung

Der Wert 200 wurde im Byte-Array gespeichert. Versuchen wir, 300 in das Byte-Array zu schreiben.

unsigned8BitIntView[1] = 300;

Wir werden das Byte-Array erneut wie im obigen Beispiel iterieren.

Ausgang:

Überprüfen Sie das unsigned8BitIntView-Objekt mit Schleifenanweisung_2

Laut Ausgabe wurde die Ganzzahl 300 nicht in das Byte-Array geschrieben, da diese Ansicht nur Ganzzahlen im Bereich von 0 bis 255 schreiben kann.

Die 300 wird ignoriert und stattdessen als 44 geschrieben. Nachfolgend wird gezeigt, wie die Ganzzahl 44 generiert wird.

Die Ganzzahl 300 kann wie folgt im Binärformat geschrieben werden.

100101100

Da diese Ansicht 8-Bit-Ganzzahlen ohne Vorzeichen interpretiert, wird das erste Bit weggelassen und die verbleibenden 8 Bits werden berücksichtigt.

00101100

Das obige Binärformat ist Integer 44. Auf die gleiche Weise können wir alle typisierten Array-Ansichten verwenden, um den zugrunde liegenden ArrayBuffer oder das Array von Bytes im Speicher zu manipulieren.

Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.

Verwandter Artikel - JavaScript Array