Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

ArrayBuffer

Baseline
Weitgehend verfügbar
*

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.

* Einige Teile dieser Funktion werden möglicherweise unterschiedlich gut unterstützt.

Das ArrayBuffer-Objekt repräsentiert einen generischen Puffer für rohe Binärdaten.

Es handelt sich um ein Array aus Bytes, das in anderen Sprachen häufig als „Byte-Array“ bezeichnet wird. Sie können den Inhalt eines ArrayBuffer nicht direkt verändern. Stattdessen erstellen Sie eines der Typed-Array-Objekte oder ein DataView-Objekt, das den Puffer in einem bestimmten Format darstellt, und verwenden es, um den Pufferinhalt zu lesen und zu schreiben.

Der Konstruktor ArrayBuffer() erstellt einen neuen ArrayBuffer mit der angegebenen Länge in Bytes. Sie können einen Array-Puffer auch aus vorhandenen Daten erhalten, beispielsweise aus einem Base64-String oder aus einer lokalen Datei.

ArrayBuffer ist ein übertragbares Objekt.

Beschreibung

Größe von ArrayBuffers ändern

ArrayBuffer-Objekte können größenveränderbar gemacht werden, indem beim Aufruf des Konstruktors ArrayBuffer() die Option maxByteLength angegeben wird. Über die Eigenschaften resizable und maxByteLength können Sie abfragen, ob ein ArrayBuffer größenveränderbar ist und wie groß er maximal sein kann. Mit einem Aufruf von resize() können Sie einem größenveränderbaren ArrayBuffer eine neue Größe zuweisen. Neue Bytes werden mit 0 initialisiert.

Diese Funktionen machen die Größenänderung von ArrayBuffer-Objekten effizienter – andernfalls müssten Sie eine Kopie des Puffers mit einer neuen Größe erstellen. Damit bietet JavaScript in dieser Hinsicht auch dieselben Möglichkeiten wie WebAssembly (der lineare Speicher von Wasm kann mit WebAssembly.Memory.prototype.grow() vergrößert werden).

ArrayBuffers übertragen

ArrayBuffer-Objekte können mithilfe des Algorithmus für strukturiertes Klonen zwischen verschiedenen Ausführungskontexten wie Web Workers oder Service Workers übertragen werden. Dazu wird der ArrayBuffer bei einem Aufruf von Worker.postMessage() oder ServiceWorker.postMessage() als übertragbares Objekt übergeben. In reinem JavaScript können Sie die Eigentümerschaft am Speicher außerdem mit der Methode transfer() oder transferToFixedLength() von einem ArrayBuffer auf einen anderen übertragen.

Wenn ein ArrayBuffer übertragen wird, wird seine ursprüngliche Kopie abgetrennt – das bedeutet, dass sie nicht mehr verwendet werden kann. Zu jedem Zeitpunkt gibt es nur eine Kopie des ArrayBuffer, die tatsächlich Zugriff auf den zugrunde liegenden Speicher hat. Abgetrennte Puffer verhalten sich wie folgt:

  • byteLength wird zu 0 (sowohl für den Puffer als auch für die zugehörigen Typed-Array-Ansichten).
  • Methoden wie resize() und slice() lösen bei einem Aufruf einen TypeError aus. Auch die Methoden der zugehörigen Typed-Array-Ansichten lösen einen TypeError aus.

Anhand der Eigenschaft detached können Sie prüfen, ob ein ArrayBuffer abgetrennt wurde.

Konstruktor

ArrayBuffer()

Erstellt ein neues ArrayBuffer-Objekt.

Statische Eigenschaften

ArrayBuffer[Symbol.species]

Die Konstruktorfunktion, mit der abgeleitete Objekte erstellt werden.

Statische Methoden

ArrayBuffer.isView()

Gibt true zurück, wenn arg eine der ArrayBuffer-Ansichten ist, beispielsweise eines der Typed-Array-Objekte oder ein DataView. Andernfalls wird false zurückgegeben.

Instanzeigenschaften

Diese Eigenschaften sind auf ArrayBuffer.prototype definiert und werden von allen ArrayBuffer-Instanzen gemeinsam genutzt.

ArrayBuffer.prototype.byteLength

Die Größe des ArrayBuffer in Bytes. Sie wird beim Erstellen des Arrays festgelegt und kann nur mit der Methode ArrayBuffer.prototype.resize() geändert werden, wenn der ArrayBuffer größenveränderbar ist.

ArrayBuffer.prototype.constructor

Die Konstruktorfunktion, die das Instanzobjekt erstellt hat. Für ArrayBuffer-Instanzen ist der Anfangswert der Konstruktor ArrayBuffer.

ArrayBuffer.prototype.detached

Schreibgeschützt. Gibt true zurück, wenn der ArrayBuffer abgetrennt (übertragen) wurde, andernfalls false.

ArrayBuffer.prototype.maxByteLength

Die schreibgeschützte maximale Länge in Bytes, auf die der ArrayBuffer vergrößert werden kann. Sie wird beim Erstellen des Arrays festgelegt und kann nicht geändert werden.

ArrayBuffer.prototype.resizable

Schreibgeschützt. Gibt true zurück, wenn die Größe des ArrayBuffer geändert werden kann, andernfalls false.

ArrayBuffer.prototype[Symbol.toStringTag]

Der Anfangswert der Eigenschaft [Symbol.toStringTag] ist der String "ArrayBuffer". Diese Eigenschaft wird in Object.prototype.toString() verwendet.

Instanzmethoden

ArrayBuffer.prototype.resize()

Ändert die Größe des ArrayBuffer auf die angegebene Anzahl von Bytes.

ArrayBuffer.prototype.slice()

Gibt einen neuen ArrayBuffer zurück, dessen Inhalt eine Kopie der Bytes dieses ArrayBuffer von begin (einschließlich) bis end (ausschließlich) ist. Ist begin oder end negativ, bezeichnet der Wert einen Index vom Ende des Arrays aus statt von dessen Anfang.

ArrayBuffer.prototype.transfer()

Erstellt einen neuen ArrayBuffer mit demselben Byte-Inhalt wie dieser Puffer und trennt anschließend diesen Puffer ab.

ArrayBuffer.prototype.transferToFixedLength()

Erstellt einen neuen, nicht größenveränderbaren ArrayBuffer mit demselben Byte-Inhalt wie dieser Puffer und trennt anschließend diesen Puffer ab.

Beispiele

Einen ArrayBuffer erstellen

In diesem Beispiel erstellen wir einen 8-Byte-Puffer mit einer Int32Array-Ansicht, die auf den Puffer verweist:

js
const buffer = new ArrayBuffer(8);
const view = new Int32Array(buffer);

Spezifikationen

Spezifikation
ECMAScript® 2027 Language Specification
# sec-arraybuffer-objects

Browser-Kompatibilität

Siehe auch