Baseline 2024
Newly available
Die transfer()
Methode von ArrayBuffer
Instanzen erstellt einen neuen ArrayBuffer
mit demselben Byte-Inhalt wie dieser Puffer und trennt dann diesen Puffer.
transfer()
transfer(newByteLength)
Parameter
newByteLength
Optional
Die byteLength
des neuen ArrayBuffer
. StandardmäÃig die byteLength
dieses ArrayBuffer
.
newByteLength
kleiner ist als die byteLength
dieses ArrayBuffer
, werden die "überschüssigen" Bytes verworfen.newByteLength
gröÃer ist als die byteLength
dieses ArrayBuffer
, werden die zusätzlichen Bytes mit Nullen gefüllt.ArrayBuffer
anpassbar ist, darf newByteLength
nicht gröÃer als sein maxByteLength
sein.Ein neues ArrayBuffer
Objekt. Sein Inhalt ist initialisiert auf den Inhalt dieses ArrayBuffer
, und zusätzliche Bytes, falls vorhanden, sind mit Nullen gefüllt. Der neue ArrayBuffer
ist anpassbar genau dann, wenn dieser ArrayBuffer
anpassbar ist, in welchem Fall sein maxByteLength
derselbe ist wie der dieses ArrayBuffer
. Der ursprüngliche ArrayBuffer
ist getrennt.
RangeError
Ausgelöst, wenn dieser ArrayBuffer
anpassbar ist und newByteLength
gröÃer als der maxByteLength
dieses ArrayBuffer
ist.
TypeError
Ausgelöst, wenn dieser ArrayBuffer
bereits getrennt ist.
Die transfer()
Methode führt dieselbe Operation durch wie der strukturierte Klonalgorithmus. Sie kopiert die Bytes dieses ArrayBuffer
in ein neues ArrayBuffer
Objekt und trennt dann dieses ArrayBuffer
Objekt. Weitere Informationen finden Sie unter Ãbertragen von ArrayBuffers.
transfer()
bewahrt die Anpassbarkeit dieses ArrayBuffer
. Wenn Sie möchten, dass der neue ArrayBuffer
nicht anpassbar ist, verwenden Sie stattdessen transferToFixedLength()
. Es gibt keine Möglichkeit, einen Puffer zu übertragen, der einen Puffer fester Länge anpassbar macht.
transfer()
ist sehr effizient, da Implementierungen diese Methode als eine Zero-Copy-Bewegung oder als realloc
implementieren können â es muss kein tatsächliches Kopieren der Daten erfolgen.
// Create an ArrayBuffer and write a few bytes
const buffer = new ArrayBuffer(8);
const view = new Uint8Array(buffer);
view[1] = 2;
view[7] = 4;
// Copy the buffer to the same size
const buffer2 = buffer.transfer();
console.log(buffer.detached); // true
console.log(buffer2.byteLength); // 8
const view2 = new Uint8Array(buffer2);
console.log(view2[1]); // 2
console.log(view2[7]); // 4
// Copy the buffer to a smaller size
const buffer3 = buffer2.transfer(4);
console.log(buffer3.byteLength); // 4
const view3 = new Uint8Array(buffer3);
console.log(view3[1]); // 2
console.log(view3[7]); // undefined
// Copy the buffer to a larger size
const buffer4 = buffer3.transfer(8);
console.log(buffer4.byteLength); // 8
const view4 = new Uint8Array(buffer4);
console.log(view4[1]); // 2
console.log(view4[7]); // 0
// Already detached, throws TypeError
buffer.transfer(); // TypeError: Cannot perform ArrayBuffer.prototype.transfer on a detached ArrayBuffer
Ãbertragen eines anpassbaren ArrayBuffer
const buffer = new ArrayBuffer(8, { maxByteLength: 16 });
const view = new Uint8Array(buffer);
view[1] = 2;
view[7] = 4;
// Copy the buffer to a smaller size
const buffer2 = buffer.transfer(4);
console.log(buffer2.byteLength); // 4
console.log(buffer2.maxByteLength); // 16
const view2 = new Uint8Array(buffer2);
console.log(view2[1]); // 2
console.log(view2[7]); // undefined
buffer2.resize(8);
console.log(view2[7]); // 0
// Copy the buffer to a larger size within maxByteLength
const buffer3 = buffer2.transfer(12);
console.log(buffer3.byteLength); // 12
// Copy the buffer to a larger size than maxByteLength
buffer3.transfer(20); // RangeError: Invalid array buffer length
Spezifikationen Browser-Kompatibilität Siehe auch
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4