Az Önhöz hasonló olvasók támogatják a MUO-t. Amikor a webhelyünkön található linkek használatával vásárol, társult jutalékot kaphatunk. Olvass tovább.

A puffer egy meghatározott hely a nyers memóriában. Ideiglenes tárolóhelyként szolgál a felesleges bináris adatok számára, amelyeket a feldolgozó egység az adott pillanatban nem tud elfogadni.

A Node.js tartalmaz egy pufferosztályt. Képes kezelni a bináris adatokat a TCP (Transfer Control Protocol) adatfolyamok és olvasási-írási műveletek kezelésekor egy fájlrendszeren.

Ismerje meg, hogyan hozhat létre, olvassa el és módosítsa a puffer tartalmát.

Puffer létrehozása

A Node.js-ben puffer létrehozásához használja a alloc() vagy tól től() mód. A alloc() metódus új puffert hoz létre, amelynek méretét a létrehozás során adja meg első és egyetlen kötelező paraméterként. Akkor hasznos, ha a puffer létrehozása idején nem rendelkezik tárolandó adatokkal.

Adja meg a pufferméret paramétert bájtokban, amikor puffert hoz létre a alloc() módszer. Például:

const buf = Buffer.alloc(8);
konzol.log (buf);
// Kimenet:

A pufferosztály automatikusan nullákat ad hozzá helyőrző értékként az új adatokhoz, amikor létrehozza azokat a alloc() módszer.

A puffer osztály minden 0 értéket mint 00, hexadecimális formátum használatával. Ebben a példában összesen nyolc értéket tartalmaz.

A puffer különböző helyőrző értékekkel történő inicializálásához adjon át egy másodpercet tölt paraméter:

const buf_filled = Buffer.alloc(8, 5);
konzol.log (buf_filled);
// Kimenet:

Ez az objektum a memória egy részét idézi, amely 8 bájtot tárol az értékből 05. Vegye figyelembe, hogy bár egy számot adott át a tölt paramétert, a pufferek csak binárisan tárolják az adatokat.

Miután lefoglalta a memóriát a pufferben, írja be az adatokat a következő hívásával ír() módszer:

const buf = Buffer.alloc(8);

buf.write("v", "utf-8");
konzol.log (buf)
// Kimenet:

buf.write("va","utf-8");
konzol.log (buf)
// Kimenet:

A ír() metódus karakterkódolást használ az első paraméter konvertálásához, a utf-8 majd beírja a karakterláncot a pufferbe. Egy második karakter hozzáadása a karakterlánchoz kitölti a második bájtot.

Ha meglévő adattípusokból, például karakterláncokból vagy tömbökből szeretne adatokat kinyerni, használja a tól től() módszer. Ez a módszer puffereket hoz létre karakterláncokból és tömbökből.

Például:

// Húr
const stringBuf = Buffer.from('húr')
konzol.log (stringBuf)
// Kimenet:

// Tömb
const arrayBuf = Puffer.from([97, 114, 114, 97, 121], "hex")
konzol.log (arrayBuf);
// Kimenet:

A tól től() metódus a bemenetet veszi első paraméterként, kiszámítja az adatok kódolásához szükséges bájtok számát, majd elküldi az eredményt a pufferbe. Másik kódolási formátum megadásával második paraméterként felülírhatja az alapértelmezett kódolást (UTF-8).

Számok átadása a tól től() módszer hibát fog eredményezni.

Puffer olvasása

Bár a pufferek hasonlóak a tömbökhöz, nem méretezhetők át, és kezelhetők bináris számítógépes adatok a beépített módszereknek köszönhetően.

A Buffer osztály lehetővé teszi, hogy a JavaScript szögletes zárójeles szintaxisát használva egyes bájtokat olvassunk az adatokból.

Például:

const myBuf = Buffer.from('Enyém');
konzol.log(MyBuf[1]);
// kimenet: 105

konzol.log(MyBuf[3]);
// kimenet: 101

konzol.log(MyBuf[5]);
// kimenet: undefined

A fenti kódblokk a szögletes zárójeles szintaxist használja az első és a harmadik bájt értékeinek lekéréséhez decimális ábrázolásukban. Érvénytelen bájt megszerzésének kísérlete egy határozatlan hiba.

Az összes adat eléréséhez a Buffer osztály metódusokkal rendelkezik toJSON() és toString(), amelyek két különböző formátumban kapják meg a tartalmat.

A toString() metódus egy karakterláncot ad ki puffertartalomként:

const myBuf = Buffer.from('Enyém');
konzol.log(myBuf.toString());
// kimenet: 'enyém'

const numberBuf = Puffer.from([123]);
konzol.log(számBuf.toString())
// Kimenet: '{'

const emptyBuf = Buffer.alloc(5);
konzol.log(üresBuf.toString());
// kimenet: '\\x00\\x00\\x00\\x00\\x00'

Az első hívás inicializálja a puffert a "Enyém”, amelyet a toString hívása replikál. A második példa egy int tömböt használ az inicializáláshoz, amelynek karakterlánc-ábrázolása a következő:{" karakter. A végső esetben egy puffer öttel null értékek visszaadja a karakterláncot "\x00\x00\x00\x00\x00”. A húr \x00 a null hexadecimális reprezentációja.

A toString() metódus mindig karakterlánc formátumban adja ki az eredményt, függetlenül attól, hogy milyen típusú adatokkal inicializálja a puffert.

A .toJSON() A metódus a pufferadatok decimális megjelenítését adja vissza, függetlenül a puffer inicializálásához használt adatoktól.

Például:

const myBuf = Buffer.from('Enyém');
konzol.log(myBuf.toJSON());
// Kimenet: { típus: "puffer", adatok: [ 77, 105, 110, 101 ] }

A JSON kimenetnek van egy típus értékű ingatlan Puffer eredetének jelzésére. Adattulajdonsága az eredeti bájttömböt reprezentáló tizedesjegyek tömbjét tárolja.

Puffer módosítása

A puffer egyes bájtjainak eléréséhez hasonlóan a puffer tartalmának egyes bájtjait is módosíthatja a szögletes zárójeles szintaxis használatával.

Ha szögletes zárójeles szintaxist használ egy egyedi tartalom megváltoztatására, akkor csak az érték decimális megjelenítését rendelheti hozzá.

Például:

myBuf[0] = 70
konzol.log(myBuf.toString())
// kimenet: 'Rendben'

Mivel a pufferek bináris adatok, a puffer meghatározott részéhez nem lehet karakterláncot adni. Ha egy egyedi bájtot próbál meg karakterláncként beállítani, a puffer null karakterré fordítja le.

Például:

myBuf[0] = "F";
konzol.log(myBuf.toString());
// kimenet: '\\x00ine'

Alternatív megoldásként módosíthatja a puffer teljes tartalmát a ír() módszer.

Fontolja meg egy index beszúrását a puffer hosszán kívülre. Ahelyett, hogy hibát adna vissza, a puffer figyelmen kívül hagyja az érvénytelen indexet, és érintetlenül hagyja az eredeti puffertartalmat.

Például próbálja meg beállítani az ötödik elemét myBuf nak nek r decimális ábrázolásán keresztül 114:

myBuf[4] = 114;
konzol.log(myBuf.toString());
// kimenet: 'enyém'

Vegyük észre, hogy a toString() metódus ugyanazt az értéket adja vissza 'Enyém'.

Mivel a puffert nem lehet átméretezni, a több adat beírása, mint amennyi belefér, azt eredményezi, hogy eldobja a többletadatokat. Például:

const buf1 = Buffer.alloc(5)
buf1.write('szám');
konzol.log(buf1.toString())
// kimenet: "szám"

Használni a toString() módszerrel megerősíti a pufferadatokat, akkor visszatér „szám” inkább mint 'szám'. Melyik a beillesztett argumentum a ír() módszer.

A pufferek soros módon írnak az index nullától kezdődően. A ír() metódus sorozatosan bájtokat ad a pufferhez, felülírva a korábbi adatokat.

Például:

const buf2 = Buffer.alloc(6);

buf2.write('tag');
konzol.log(buf2.toString())
// kimenet: 'tag'

buf2.write('Szia');
konzol.log(buf2.toString());
// kimenet: 'himber'

A fenti kód egy hat bájtos puffert hoz létre, és hozzáadja a " karakterláncottag" a segítségével ír() módszer.

Ezután új tartalommal frissíti a puffert, amely kevesebb memóriát foglal el, mint a korábbi tartalom.

Ez egy új karakterlánc létrehozását eredményezi, amelyben az első két bájt felül van írva, a többi bájt pedig változatlan marad.

Számos API és adatstruktúra használ puffereket

Most már tudja, hogyan hozhat létre puffert, hogyan írjon bele, olvassa el a tartalmát és módosítsa a megfelelő módszerekkel.

Számos más módszer is elérhető a Node.js pufferosztályhoz.

Ismernie kell ezeket a módszereket, és meg kell értenie a puffereket, hogy megértse, hogyan működnek a különböző fogalmak, például az adatfolyamok és a fájlrendszerek.