GeezerVison is showing developer.mozilla.org — ArrayBuffer - JavaScript | MDN
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.
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).
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.
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.
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);
|