Ce face Buffer
Un Buffer este o zonă de memorie cu octeți (valori de la 0 la 255). Este clasa prin care Node.js îți dă datele binare: conținutul unui fișier citit fără codificare, bucățile unui stream, rezultatul unui hash. Buffer este o subclasă a lui Uint8Array, deci merge oriunde se cere un Uint8Array.
Buffer.from("text") transformă textul în octeți UTF-8; buf.toString() face invers. Codificări utile: "utf8", "hex", "base64", "base64url", "latin1". Literele românești cu diacritice ocupă 2 octeți în UTF-8, de aceea Buffer.byteLength("ș") este 2, deși "ș".length este 1.
Buffer.alloc(n) creează un buffer de n octeți, plin cu zero. Buffer.concat lipește mai multe. subarray dă o porțiune care împarte memoria cu originalul (modificările se văd în ambele). new Buffer() este învechit: folosește Buffer.from sau Buffer.alloc.
Parametri
| Parametru | Descriere |
|---|---|
Buffer.from(text, cod) |
Octeții textului în codificarea dată (implicit UTF-8). |
Buffer.alloc(n) |
Buffer nou de n octeți, umplut cu 0. |
Buffer.concat(listă) |
Un buffer nou din mai multe. |
buf.toString(cod, start, sfârșit) |
Octeții transformați în text. |
Buffer.byteLength(text) |
Câți octeți ocupă textul. |
buf.equals(alt) / Buffer.compare(a, b) |
Compară conținutul. |
Exemple
Exemplul 1: Text, octeți, hex și base64
const buf = Buffer.from("Iași");
console.log(buf);
console.log("caractere:", "Iași".length, "octeți:", buf.length);
console.log("hex:", buf.toString("hex"));
console.log("base64:", buf.toString("base64"));
console.log(Buffer.from("SWHImWk=", "base64").toString("utf8"));
Rezultat
<Buffer 49 61 c8 99 69>
caractere: 4 octeți: 5
hex: 4961c89969
base64: SWHImWk=
Iași
Exemplul 2: Bucăți lipite cu concat
Litera „ș” (octeții c8 99) a fost tăiată între două bucăți. Separat, bucățile dau caractere stricate; lipite, textul este corect.
const tot = Buffer.from("Brașov");
const parte1 = tot.subarray(0, 4);
const parte2 = tot.subarray(4);
console.log(parte1.toString() + parte2.toString());
console.log(Buffer.concat([parte1, parte2]).toString());
Rezultat
Bra��ov
Brașov
Exemplul 3: Octeți individuali și comparare
const antet = Buffer.alloc(4);
antet.writeUInt16BE(2026, 0);
antet[2] = 0xff;
console.log(antet, antet.readUInt16BE(0), antet[2]);
console.log(Buffer.from("abc").equals(Buffer.from("abc")));
console.log(Buffer.compare(Buffer.from("a"), Buffer.from("b")));
Rezultat
<Buffer 07 ea ff 00> 2026 255
true
-1
Greșeli frecvente
- Verifici lungimea unui text pentru o limită în octeți (de exemplu o coloană din baza de date) cu
text.length: diacriticele ocupă mai mult. FoloseșteBuffer.byteLength(text). - Folosești
new Buffer(10): este învechit și, în versiunile vechi, putea conține date vechi din memorie. ScrieBuffer.alloc(10). - Modifici un
subarrayși te miri că s-a schimbat și originalul: împart aceeași memorie. Pentru o copie, foloseșteBuffer.from(buf).
Comenzi înrudite
stream.Readable: Stream-ul din care citești date bucată cu bucată: fișiere, cereri HTTP, stdin. Readable.from îl creează din orice iterabil.crypto.createHash / createHmac: Calculează amprenta (hash) unui text sau fișier cu SHA-256 și semnături HMAC pentru verificarea mesajelor.zlib (gzip, brotli): Comprimă și decomprimă date cu gzip, deflate sau Brotli: fișiere .gz, răspunsuri HTTP mai mici.fs.readFile: Citește tot conținutul unui fișier: ca text dacă dai codificarea („utf8”), altfel ca Buffer cu octeții bruți.