Medpomnilnik je določeno mesto v neobdelanem pomnilniku. Služi kot začasen prostor za shranjevanje odvečnih binarnih podatkov, ki jih procesna enota v določenem trenutku ne more sprejeti.
Node.js vključuje razred Buffer. Lahko obravnava binarne podatke pri upravljanju tokov TCP (Transfer Control Protocol) in operacij branja in pisanja v datotečnem sistemu.
Naučite se ustvarjati, brati in spreminjati vsebino medpomnilnika.
Ustvarjanje medpomnilnika
Če želite ustvariti medpomnilnik v Node.js, boste uporabili dodeli () oz od() metode. The dodeli () metoda ustvari nov vmesni pomnilnik, pri čemer določi njegovo velikost med ustvarjanjem kot prvi in edini zahtevani parameter. Uporabno je, če v času ustvarjanja medpomnilnika nimate podatkov za shranjevanje.
Podajte parameter velikosti medpomnilnika v bajtih, ko ustvarite medpomnilnik z dodeli () metoda. Na primer:
konst buf = Buffer.alloc(8);
konzola.log (buf);
// izhod:
Razred medpomnilnika samodejno doda ničle kot vrednosti ograd za nove podatke, ko jih ustvarite z dodeli () metoda.
Razred medpomnilnika izraža vsako vrednost 0 kot 00, v šestnajstiški obliki. V tem primeru vsebuje skupaj osem vrednosti.
Če želite inicializirati medpomnilnik z različnimi vrednostmi nadomestnih znakov, prepustite sekundo napolniti parameter:
konst buf_filled = Buffer.alloc(8, 5);
konzola.log (buf_filled);
// izhod:
Ta objekt navaja del v pomnilniku, ki hrani 8 bajtov vrednosti 05. Upoštevajte, da čeprav ste posredovali številko kot napolniti parameter, medpomnilniki shranjujejo samo podatke v dvojiški obliki.
Po dodelitvi pomnilnika medpomnilniku zapišite podatke s klicem pisati() metoda:
konst buf = Buffer.alloc(8);
buf.write("v", "utf-8");
konzola.log (buf)
// izhod:
buf.write("va","utf-8");
konzola.log (buf)
// izhod:
The pisati() metoda uporablja kodiranje znakov za pretvorbo prvega parametra z uporabo utf-8 in nato zapiše niz v medpomnilnik. Dodajanje drugega znaka v niz bo zapolnilo drugi bajt.
Če želite izvleči podatke iz obstoječih tipov podatkov, kot so nizi ali polja, uporabite od() metoda. Ta metoda ustvari medpomnilnike iz nizov in nizov.
Na primer:
// Vrvica
konst stringBuf = Buffer.from('vrvica')
konzola.log (stringBuf)
// izhod:
// Niz
konst arrayBuf = Buffer.from([97, 114, 114, 97, 121], 'hex')
konzola.log (arrayBuf);
// izhod:
The od() metoda vzame vhod kot svoj prvi parameter, izračuna število bajtov, ki jih potrebuje za kodiranje podatkov, in nato pošlje rezultat v medpomnilnik. Če kot drugi parameter navedete drugo obliko kodiranja, lahko preglasite privzeto kodiranje (UTF-8).
Prenos številk v od() metoda bo povzročila napako.
Branje medpomnilnika
Čeprav so vmesni pomnilniki podobni nizom, jim ni mogoče spreminjati velikosti in jih je mogoče obravnavati binarni računalniški podatki zahvaljujoč vgrajenim metodam.
Razred Buffer nam omogoča branje posameznih bajtov njegovih podatkov s sintakso oglatih oklepajev JavaScripta.
Na primer:
konst myBuf = Buffer.from('moje');
konzola.log(MyBuf[1]);
// izhod: 105konzola.log(MyBuf[3]);
// izhod: 101
konzola.log(MyBuf[5]);
// izhod: nedefinirano
Zgornji blok kode uporablja sintakso oglatega oklepaja za pridobitev vrednosti prvega in tretjega bajta v njuni decimalni predstavitvi. Poskus pridobitve neveljavnega bajta bo povzročil napako nedoločeno napaka.
Za dostop do vseh svojih podatkov ima razred Buffer metode toJSON() in toString(), ki pridobijo vsebino v dveh različnih formatih.
The toString() metoda izpiše niz kot vsebino medpomnilnika:
konst myBuf = Buffer.from('moje');
konzola.log(myBuf.toString());
// izhod: 'Moje'konst numberBuf = Buffer.from([123]);
konzola.log(številkaBuf.toString())
// izhod: '{'
konst prazniBuf = Buffer.alloc(5);
konzola.log(prazniBuf.toString());
// izhod: '\\x00\\x00\\x00\\x00\\x00'
Prvi klic inicializira medpomnilnik z vrednostjo "moje«, ki ga ponovi klic toString. Drugi primer za inicializacijo uporablja matriko z enim int, ki ima predstavitev niza kot "{” znak. V končnem primeru medpomnilnik s petimi ničelne vrednosti vrne niz "\x00\x00\x00\x00\x00”. Niz \x00 je šestnajstiška predstavitev ničle.
The toString() metoda vedno izpiše rezultat v obliki niza, ne glede na vrsto podatkov, s katerimi inicializirate medpomnilnik.
The .toJSON() metoda vrne decimalno predstavitev podatkov medpomnilnika, ne glede na podatke, ki ste jih uporabili za inicializacijo medpomnilnika.
Na primer:
konst myBuf = Buffer.from('moje');
konzola.log(myBuf.toJSON());
// izhod: { vrsta: 'Buffer', podatki: [ 77, 105, 110, 101 ] }
Izhod JSON ima a vrsta nepremičnine v vrednosti Medpomnilnik da navede njegov izvor. Njegova lastnost podatkov shrani niz decimalnih mest, ki predstavljajo izvirno niz bajtov.
Spreminjanje medpomnilnika
Podobno kot pri dostopu do posameznih bajtov medpomnilnika, lahko tudi spreminjate posamezne bajte vsebine medpomnilnika s sintakso oglatih oklepajev.
Ko uporabljate sintakso oglatih oklepajev za spreminjanje posamezne vsebine, lahko dodelite samo decimalno predstavitev vrednosti.
Na primer:
myBuf[0] = 70
konzola.log(myBuf.toString())
// izhod: 'V redu'
Ker so medpomnilniki binarni podatki, določenemu delu medpomnilnika ne morete dati niza. Če poskusite posamezen bajt nastaviti na niz, ga bo Buffer prevedel v ničelni znak.
Na primer:
mojBuf[0] = 'F';
konzola.log(myBuf.toString());
// izhod: '\\x00ine'
Druga možnost je, da spremenite celotno vsebino medpomnilnika z uporabo pisati() metoda.
Razmislite o vstavljanju indeksa zunaj dolžine medpomnilnika. Namesto da vrne napako, Buffer prezre neveljaven indeks in ohrani izvirno vsebino Bufferja nedotaknjeno.
Na primer, poskusite nastaviti peti element myBuf do r preko njegove decimalne predstavitve 114:
myBuf[4] = 114;
konzola.log(myBuf.toString());
// izhod: 'Moje'
Upoštevajte, da je toString() metoda vrne isto vrednost 'moje'.
Ker ne morete spremeniti velikosti vmesnega pomnilnika, bo poskus, da bi zapisal več podatkov, kot jih lahko sprejme, zavrgel dodatne podatke. Na primer:
konst buf1 = Buffer.alloc(5)
buf1.write('število');
konzola.log(buf1.toString())
// izhod: 'numbe'
Uporabljati toString() metoda za potrditev podatkov medpomnilnika, se vrne 'numbe' raje kot 'število'. Kar je vstavljen argument znotraj pisati() metoda.
Medpomnilniki pišejo zaporedno, z začetkom pri indeksu nič. The pisati() metoda serijsko dodaja bajte v medpomnilnik in prepisuje vse prejšnje podatke.
Na primer:
konst buf2 = Buffer.alloc(6);
buf2.write('član');
konzola.log(buf2.toString())
// izhod: 'član'
buf2.write('zdravo');
konzola.log(buf2.toString());
// izhod: 'himber'
Zgornja koda ustvari šestbajtni medpomnilnik in doda niz "član" do njega z uporabo pisati() metoda.
Nato posodobi medpomnilnik z novo vsebino, ki zavzame manj pomnilniškega prostora kot prejšnja vsebina.
Posledica tega je ustvarjanje novega niza, pri čemer sta prva dva bajta prepisana, preostali bajti pa ostanejo nespremenjeni.
Veliko API-jev in podatkovnih struktur uporablja medpomnilnike
Zdaj veste, kako ustvariti medpomnilnik, pisati vanj, brati njegovo vsebino in jo spremeniti z ustreznimi metodami.
Za delo z razredom medpomnilnika Node.js je na voljo več drugih metod.
Morali bi poznati te metode in razumeti medpomnilnike, da bi razumeli, kako delujejo različni koncepti, kot so tokovi in datotečni sistemi.