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:
byteLengthwird zu 0 (sowohl für den Puffer als auch für die zugehörigen Typed-Array-Ansichten).- Methoden wie
resize()undslice()lösen bei einem Aufruf einenTypeErroraus. Auch die Methoden der zugehörigen Typed-Array-Ansichten lösen einenTypeErroraus.
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
truezurück, wennargeine der ArrayBuffer-Ansichten ist, beispielsweise eines der Typed-Array-Objekte oder einDataView. Andernfalls wirdfalsezurückgegeben.
Instanzeigenschaften
Diese Eigenschaften sind auf ArrayBuffer.prototype definiert und werden von allen ArrayBuffer-Instanzen gemeinsam genutzt.
ArrayBuffer.prototype.byteLength-
Die Größe des
ArrayBufferin Bytes. Sie wird beim Erstellen des Arrays festgelegt und kann nur mit der MethodeArrayBuffer.prototype.resize()geändert werden, wenn derArrayBuffergrößenveränderbar ist. ArrayBuffer.prototype.constructor-
Die Konstruktorfunktion, die das Instanzobjekt erstellt hat. Für
ArrayBuffer-Instanzen ist der Anfangswert der KonstruktorArrayBuffer. ArrayBuffer.prototype.detached-
Schreibgeschützt. Gibt
truezurück, wenn derArrayBufferabgetrennt (übertragen) wurde, andernfallsfalse. ArrayBuffer.prototype.maxByteLength-
Die schreibgeschützte maximale Länge in Bytes, auf die der
ArrayBuffervergrößert werden kann. Sie wird beim Erstellen des Arrays festgelegt und kann nicht geändert werden. ArrayBuffer.prototype.resizable-
Schreibgeschützt. Gibt
truezurück, wenn die Größe desArrayBuffergeändert werden kann, andernfallsfalse. ArrayBuffer.prototype[Symbol.toStringTag]-
Der Anfangswert der Eigenschaft
[Symbol.toStringTag]ist der String"ArrayBuffer". Diese Eigenschaft wird inObject.prototype.toString()verwendet.
Instanzmethoden
ArrayBuffer.prototype.resize()-
Ändert die Größe des
ArrayBufferauf die angegebene Anzahl von Bytes. ArrayBuffer.prototype.slice()-
Gibt einen neuen
ArrayBufferzurück, dessen Inhalt eine Kopie der Bytes diesesArrayBuffervonbegin(einschließlich) bisend(ausschließlich) ist. Istbeginoderendnegativ, bezeichnet der Wert einen Index vom Ende des Arrays aus statt von dessen Anfang. ArrayBuffer.prototype.transfer()-
Erstellt einen neuen
ArrayBuffermit demselben Byte-Inhalt wie dieser Puffer und trennt anschließend diesen Puffer ab. ArrayBuffer.prototype.transferToFixedLength()-
Erstellt einen neuen, nicht größenveränderbaren
ArrayBuffermit 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:
const buffer = new ArrayBuffer(8);
const view = new Int32Array(buffer);
Spezifikationen
| Spezifikation |
|---|
| ECMAScript® 2027 Language Specification> # sec-arraybuffer-objects> |