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: 105konzol.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.