ArrayBuffer.prototype.resize / transfer în JavaScript

Redimensionează un ArrayBuffer sau îi mută memoria într-unul nou, lăsându-l pe cel vechi detașat.

Sintaxă
buffer.resize(octetiNoi)
buffer.transfer(octetiNoi)
buffer.transferToFixedLength(octetiNoi)

Ce face ArrayBuffer.prototype.resize / transfer

Un buffer creat cu { maxByteLength } poate fi mărit sau micșorat cu resize, până la acea limită. Typed arrays create fără lungime fixă peste el își ajustează automat lungimea.

transfer mută conținutul într-un ArrayBuffer nou (opțional cu altă mărime) și „detașează” bufferul vechi: lungimea lui devine 0 și nu mai poate fi folosit. Este util ca să predai datele altei părți a programului fără copii accidentale. transferToFixedLength face același lucru, dar rezultatul nu mai poate fi redimensionat.

Parametri

Parametru Descriere
octetiNoi Mărimea nouă în octeți (opțională la transfer).

Ce returnează

resize: undefined. transfer: un ArrayBuffer nou.

Exemple

Exemplul 1: Un buffer care crește

const buffer = new ArrayBuffer(2, { maxByteLength: 8 });
const vedere = new Uint8Array(buffer);

console.log(buffer.resizable, vedere.length);
buffer.resize(6);
console.log(buffer.byteLength, vedere.length);

Rezultat

true 2
6 6

Exemplul 2: Transfer și detașare

const vechi = new Uint8Array([1, 2, 3]).buffer;
const nou = vechi.transfer(5);

console.log(vechi.detached, vechi.byteLength);
console.log(new Uint8Array(nou));

Rezultat

true 0
Uint8Array(5) [ 1, 2, 3, 0, 0 ]

Greșeli frecvente

  • Apelezi resize pe un buffer creat fără maxByteLength și primești TypeError.
  • Folosești un typed array creat peste un buffer transferat și primești TypeError (buffer detașat).

Comenzi înrudite

  • ArrayBuffer: Un bloc de memorie brută, de lungime dată în octeți; citit și scris prin typed arrays sau DataView.
  • Typed arrays (Uint8Array, Float64Array...): Tablouri de lungime fixă cu numere de un singur tip, pentru date binare: imagini, fișiere, audio, rețea.
  • structuredClone: Creează o copie completă (în adâncime) a unei valori: obiecte, tablouri, Date, Map, Set.