Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. Référence
  4. Objets natifs standards
  5. ArrayBuffer
  6. transfer()

Cette page a été traduite à partir de l'anglais par la communauté.Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in EnglishAlways switch to English

ArrayBuffer : méthode transfer()

Baseline 2024
Newly available

Depuis March 2024, cette fonctionnalité fonctionne sur les appareils et les versions de navigateur les plus récents. Elle peut ne pas fonctionner sur les appareils ou navigateurs plus anciens.

La méthodetransfer() des instances deArrayBuffer crée un nouveau tableau de mémoire tampon (array buffer en anglais) contenant les mêmes octets que ce tableau, puis détache ce tableau.

Syntaxe

js
transfer()transfer(newByteLength)

Paramètres

newByteLengthFacultatif

La longueurbyteLength du nouveau tableau de mémoire tampon. Par défaut, il s'agit de la valeur debyteLength de ce tableau de mémoire tampon.

  • SinewByteLength est inférieur à la valeur debyteLength de ce tableau de mémoire tampon, les octets « débordants » sont supprimés.
  • SinewByteLength est supérieur à la valeur debyteLength de ce tableau de mémoire tampon, les octets supplémentaires sont remplis de zéros.
  • Si ce tableau de mémoire tampon est redimensionnable,newByteLength ne doit pas dépasser sa valeur demaxByteLength.

Valeur de retour

Un nouvel objetArrayBuffer. Son contenu est initialisé avec le contenu de ceArrayBuffer, et les octets supplémentaires, le cas échéant, sont remplis de zéros. Le nouveauArrayBuffer est redimensionnable si, et seulement si, ceArrayBuffer est redimensionnable, auquel cas sa valeur demaxByteLength est la même que celle de ceArrayBuffer. LeArrayBuffer d'origine est détaché.

Exceptions

RangeError

Levée si ceArrayBuffer est redimensionnable et quenewByteLength est supérieur à la valeur demaxByteLength de ceArrayBuffer.

TypeError

Levée si ceArrayBuffer est déjà détaché, ou s'il ne peut être détaché que par des opérations désignées. Actuellement, seules certaines API web sont capables de créer des objetsArrayBuffer avec des méthodes de détachement désignées, commeGPUBuffer.getMappedRange() etWebAssembly.Memory.buffer.

Description

La méthodetransfer() effectue la même opération que l'algorithme de clonage structuré. Elle copie les octets de ceArrayBuffer dans un nouveauArrayBuffer, puis détache ceArrayBuffer. Voirtransfert des ArrayBuffer pour plus d'informations.

transfer() préserve la capacité de redimensionnement de ceArrayBuffer. Si vous souhaitez que le nouveauArrayBuffer ne soit pas redimensionnable, utilisez plutôttransferToFixedLength(). Il n'existe aucun moyen de transférer un buffer qui rend unArrayBuffer à longueur fixe redimensionnable.

transfer() est très efficace car les implémentations peuvent réaliser cette méthode comme un déplacement sans copie ou unrealloc — il n'est pas nécessaire de copier effectivement les données.

Exemples

Transférer unArrayBuffer

js
// Crée un tableau de mémoire tampon et écrit quelques octetsconst buffer = new ArrayBuffer(8);const view = new Uint8Array(buffer);view[1] = 2;view[7] = 4;// Copie le tableau à la même tailleconst buffer2 = buffer.transfer();console.log(buffer.detached); // trueconsole.log(buffer2.byteLength); // 8const view2 = new Uint8Array(buffer2);console.log(view2[1]); // 2console.log(view2[7]); // 4// Copie le tableau à une taille plus petiteconst buffer3 = buffer2.transfer(4);console.log(buffer3.byteLength); // 4const view3 = new Uint8Array(buffer3);console.log(view3[1]); // 2console.log(view3[7]); // undefined// Copie le tableau à une taille plus grandeconst buffer4 = buffer3.transfer(8);console.log(buffer4.byteLength); // 8const view4 = new Uint8Array(buffer4);console.log(view4[1]); // 2console.log(view4[7]); // 0// Déjà détaché, lève une TypeErrorbuffer.transfer(); // TypeError: Cannot perform ArrayBuffer.prototype.transfer on a detached ArrayBuffer

Transférer unArrayBuffer redimensionnable

js
const buffer = new ArrayBuffer(8, { maxByteLength: 16 });const view = new Uint8Array(buffer);view[1] = 2;view[7] = 4;// Copie le tableau à une taille plus petiteconst buffer2 = buffer.transfer(4);console.log(buffer2.byteLength); // 4console.log(buffer2.maxByteLength); // 16const view2 = new Uint8Array(buffer2);console.log(view2[1]); // 2console.log(view2[7]); // undefinedbuffer2.resize(8);console.log(view2[7]); // 0// Copie le tableau à une taille plus grande dans la limite de maxByteLengthconst buffer3 = buffer2.transfer(12);console.log(buffer3.byteLength); // 12// Copie le tableau à une taille supérieure à maxByteLengthbuffer3.transfer(20); // RangeError: Invalid array buffer length

Spécifications

Specification
ECMAScript® 2026 Language Specification
# sec-arraybuffer.prototype.transfer

Compatibilité des navigateurs

Voir aussi

Help improve MDN

Learn how to contribute

Cette page a été modifiée le par lescontributeurs du MDN.


[8]ページ先頭

©2009-2026 Movatter.jp