Puhver on konkreetne koht toormälus. See toimib ajutise salvestusruumina liigsetele binaarandmetele, mida töötlemisüksus sel konkreetsel hetkel vastu ei võta.
Node.js sisaldab puhvriklassi. See suudab käsitleda binaarandmeid TCP (Transfer Control Protocol) voogude haldamisel ja failisüsteemis lugemis-kirjutustoiminguid.
Siit saate teada, kuidas puhvri sisu luua, lugeda ja muuta.
Puhvri loomine
Puhvri loomiseks rakenduses Node.js kasutage alloc() või alates () meetodid. The alloc() meetod loob uue puhvri, määrates selle suuruse loomise ajal esimese ja ainsa nõutava parameetrina. See on kasulik, kui teil pole puhvri loomise ajal andmeid, mida salvestada.
Määrake puhvri suuruse parameeter baitides, kui loote puhvri rakendusega alloc() meetod. Näiteks:
konst buf = Buffer.alloc(8);
konsool.log (buf);
// väljund:
Puhvriklass lisab uute andmete jaoks automaatselt kohahoidjate väärtustena nullid, kui loote need rakendusega alloc() meetod.
Puhvriklass väljendab iga 0 väärtust kui 00, kasutades kuueteistkümnendvormingut. Selles näites sisaldab see kokku kaheksa väärtust.
Puhvri lähtestamiseks erinevate kohatäite väärtustega andke sekund täita parameeter:
konst buf_filled = Puhver.alloc(8, 5);
konsool.log (buf_filled);
// väljund:
See objekt tsiteerib mälu osa, mis salvestab 8 baiti väärtusest 05. Pange tähele, et kuigi edastasite numbri kui täita parameeter, puhvrid salvestavad andmeid ainult kahendvormingus.
Pärast puhvrile mälu eraldamist kirjutage andmed, helistades numbrile kirjuta () meetod:
konst buf = Buffer.alloc(8);
buf.write("v", "utf-8");
konsool.log (buf)
// väljund:
buf.write("va","utf-8");
konsool.log (buf)
// väljund:
The kirjuta () meetod kasutab märgikodeeringut esimese parameetri teisendamiseks, kasutades utf-8 ja seejärel kirjutab stringi puhvrisse. Teise märgi lisamine stringile täidab teise baidi.
Olemasolevatest andmetüüpidest (nt stringidest või massiividest) andmete eraldamiseks kasutage alates () meetod. See meetod loob stringidest ja massiividest puhvrid.
Näiteks:
// String
konst stringBuf = Puhver.from("string")
konsool.log (stringBuf)
// väljund:
// Massiiv
konst arrayBuf = Puhver.from([97, 114, 114, 97, 121], 'hex')
konsool.log (arrayBuf);
// väljund:
The alates () meetod võtab sisendi oma esimese parameetrina, arvutab andmete kodeerimiseks vajalike baitide arvu ja saadab seejärel tulemuse puhvrisse. Kui sisestate teise parameetrina teise kodeeringuvormingu, saate vaikekodeeringu (UTF-8) alistada.
Numbrite edastamine alates () meetod toob kaasa vea.
Puhvri lugemine
Kuigi puhvrid sarnanevad massiividega, ei saa nende suurust muuta ja nendega saab hakkama binaarsed arvutiandmed tänu sisseehitatud meetoditele.
Puhverklass võimaldab meil lugeda selle andmete üksikuid baite, kasutades JavaScripti nurksulgude süntaksit.
Näiteks:
konst myBuf = Puhver.from("Minu");
konsool.log(MyBuf[1]);
// väljund: 105konsool.log(MyBuf[3]);
// väljund: 101
konsool.log(MyBuf[5]);
// väljund: määramata
Ülaltoodud koodiplokk kasutab nurksulgude süntaksit, et saada esimese ja kolmanda baidi väärtused nende kümnendesituses. Kehtetu baidi hankimise katse tulemuseks on an määratlemata viga.
Kõigile oma andmetele juurdepääsuks on puhvriklassis meetodid toJSON() ja toString(), mis saavad sisu kahes erinevas vormingus.
The toString() meetod väljastab puhvri sisuna stringi:
konst myBuf = Puhver.from("Minu");
konsool.log(myBuf.toString());
// väljund: 'Mine'konst numberBuf = Puhver.from([123]);
konsool.log(numberBuf.toString())
// väljund: '{'
konst emptyBuf = Buffer.alloc(5);
konsool.log(tühiBuf.toString());
// väljund: '\\x00\\x00\\x00\\x00\\x00'
Esimene kõne initsialiseerib puhvri väärtusega "Minu oma”, mida toStringi kõne kordab. Teises näites kasutatakse lähtestamiseks ühe int massiivi, mille stringi esitus on "{” tegelane. Viimasel juhul puhver viiega nullväärtused tagastab stringi "\x00\x00\x00\x00\x00”. String \x00 on nulli kuueteistkümnendsüsteem.
The toString() meetod väljastab tulemuse alati stringivormingus, olenemata sellest, mis tüüpi andmetega puhvri lähtestate.
The .toJSON() meetod tagastab puhvri andmete kümnendkoha, olenemata sellest, milliseid andmeid kasutasite puhvri lähtestamiseks.
Näiteks:
konst myBuf = Puhver.from("Minu");
konsool.log(myBuf.toJSON());
// väljund: { tüüp: 'puhver', andmed: [ 77, 105, 110, 101 ] }
JSON-väljundil on a tüüp vara väärtusega Puhver et näidata selle päritolu. Selle andmeatribuut salvestab kümnendkohtade massiivi, mis esindavad algset baidimassiivi.
Puhvri muutmine
Sarnaselt puhvri üksikutele baitidele juurdepääsuga saate muuta ka puhvri sisu üksikuid baite, kasutades nurksulgude süntaksit.
Kui kasutate üksiku sisu muutmiseks nurksulgude süntaksit, saate määrata ainult väärtuse kümnendkoha.
Näiteks:
myBuf[0] = 70
konsool.log(myBuf.toString())
// väljund: 'hästi'
Kuna puhvrid on kahendandmed, ei saa te puhvri kindlale osale anda stringi. Kui proovite määrata üksiku baidi stringiks, tõlgib puhver selle nullmärgiks.
Näiteks:
myBuf[0] = "F";
konsool.log(myBuf.toString());
// väljund: '\\x00ine'
Teise võimalusena saate muuta puhvri kogu sisu, kasutades kirjuta () meetod.
Kaaluge indeksi lisamist väljaspool puhvri pikkust. Vea tagastamise asemel ignoreerib puhver kehtetut indeksit ja jätab algse puhvri sisu puutumata.
Näiteks proovige määrata viiendat elementi myBuf juurde r kümnendkoha esituse kaudu 114:
myBuf[4] = 114;
konsool.log(myBuf.toString());
// väljund: 'Mine'
Pange tähele, et toString() meetod tagastab sama väärtuse "Minu".
Kuna te ei saa puhvri suurust muuta, siis kui proovite kirjutada rohkem andmeid, kui ühte mahub, kaotab see lisaandmed. Näiteks:
konst buf1 = Buffer.alloc(5)
buf1.write('number');
konsool.log(buf1.toString())
// väljund: 'numbe'
Kasutades toString() puhverandmete kinnitamise meetodil, naaseb see "numb" pigem kui 'number'. Mis on argumenti sisestatud argument kirjuta () meetod.
Puhvrid kirjutavad järjestikku, alustades indeksist nullist. The kirjuta () meetod lisab puhvrisse baite järjestikku, kirjutades üle kõik varasemad andmed.
Näiteks:
konst buf2 = Buffer.alloc(6);
buf2.write('liige');
konsool.log(buf2.toString())
// väljund: 'liige'
buf2.write('Tere');
konsool.log(buf2.toString());
// väljund: 'himber'
Ülaltoodud kood loob kuuebaidise puhvri ja lisab stringi "liige" sellele kasutades kirjuta () meetod.
Seejärel värskendab see puhvrit uue sisuga, mis võtab vähem mäluruumi kui varasem sisu.
Selle tulemuseks on uue stringi loomine, mille esimesed kaks baiti kirjutatakse üle ja ülejäänud baidid jäetakse muutmata.
Paljud API-d ja andmestruktuurid kasutavad puhvreid
Nüüd teate, kuidas puhvrit luua, sinna kirjutada, selle sisu lugeda ja sobivate meetoditega muuta.
Puhverklassiga Node.js kasutamiseks on saadaval veel mitu meetodit.
Peaksite teadma neid meetodeid ja mõistma puhvreid, et mõista, kuidas erinevad mõisted, nagu vood ja failisüsteemid, töötavad.