Buffer je Nodeov način za obravnavo surovih binarnih podatkov — zaporedje bajtov fiksne dolžine, shranjeno zunaj V8 heap-a. Ker so nizi JavaScript namenjeni besedilu (Unicode), obstajajo Bufferji za delo z binarnimi podatki: vsebina datotek, omrežni paketi, slike, šifriranje, itd.
Zakaj je to pomembno
JavaScript strings → text (UTF-16). Can't cleanly represent arbitrary bytes.
Buffers → raw bytes (0–255 each). For binary data that isn't text.
Ko preberete datoteko ali prejmate omrežne podatke, so prisotni kot bajti — Buffer — ki ga lahko nato dekodirate v niz, če je besedilo, ali obdelate kot binarne podatke, če ni.
Ustvarjanje in uporaba Bufferjev
const buf = Buffer.from("Hello"); // from a string → bytes
const buf2 = Buffer.from([72, 105]); // from byte values → "Hi"
const buf3 = Buffer.alloc(10); // 10 zero-filled bytes
buf.length; // 5 (bytes, not characters)
buf.toString("utf8"); // "Hello" — decode back to text
buf.toString("hex"); // "48656c6c6f"
buf.toString("base64"); // "SGVsbG8="
buf[0]; // 72 — access individual bytes
Kje se pojavljajo Bufferji
// file reads without an encoding return a Buffer
const data = await fs.promises.readFile("image.png"); // Buffer (binary)
const text = await fs.promises.readFile("file.txt", "utf8"); // string (decoded)
// streams emit Buffer chunks
req.on("data", (chunk) => { /* chunk is a Buffer */ });
// crypto, compression, network protocols all work with Buffers
crypto.randomBytes(16); // a Buffer of 16 random bytes
Če preberete datoteko brez navedbe kodiranja, dobite Buffer; navedite "utf8" in Node ga za vas dekodira v niz.
Subtilna točka: bajti vs znaki
Buffer.from("café").length; // 5 (é is 2 bytes in UTF-8) — NOT 4 characters
Dolžina Bufferja je v bajtih, kar se lahko razlikuje od števila znakov za večbajdno (ne-ASCII) besedilo — relevantno pri rezanju binarnih podatkov.
Zakaj je to pomembno
Bufferji so način, kako Node obravnava vse binarne podatke, kar je neizogibno pri delu s strežnikom: branje datotek, ki niso besedilo, obdelava tokov, omrežni protokoli, kriptografija, nalaganje slik/datotek in stiskanje.
Razumevanje, da I/O v osnovi deluje z bajti (Buffers) — in kako pretvarjati med Bufferji in nizi s pravilnim kodiranjem — je bistveno, kadar se lotite kaj več kot navadnega besedila, in je temelj tokov, datotečnega sistema in kriptografije.
