Čitatelji poput vas podržavaju MUO. Kada kupite putem poveznica na našoj stranici, možemo zaraditi partnersku proviziju. Čitaj više.

Međuspremnik je određeno mjesto u sirovoj memoriji. Služi kao privremeni prostor za pohranu viška binarnih podataka koje procesorska jedinica u tom trenutku ne može prihvatiti.

Node.js uključuje klasu međuspremnika. Može raditi s binarnim podacima pri upravljanju TCP (Transfer Control Protocol) tokovima i operacijama čitanja i pisanja na datotečnom sustavu.

Naučite kako stvoriti, čitati i mijenjati sadržaj međuspremnika.

Stvaranje međuspremnika

Da biste stvorili međuspremnik u Node.js, upotrijebit ćete aloc() ili iz() metode. The aloc() metoda stvara novi međuspremnik, navodeći njegovu veličinu tijekom stvaranja kao prvi i jedini potrebni parametar. Korisno je kada nemate podataka za pohranjivanje u trenutku stvaranja međuspremnika.

Odredite parametar veličine međuspremnika u bajtovima kada kreirate međuspremnik s aloc() metoda. Na primjer:

konst buf = Buffer.alloc(8);
konzola.log (buf);
// izlaz:
instagram viewer

Klasa međuspremnika automatski dodaje nule kao vrijednosti rezerviranog mjesta za nove podatke kada ih kreirate s aloc() metoda.

Klasa međuspremnika izražava svaku vrijednost 0 kao 00, koristeći heksadecimalni format. U ovom primjeru sadrži ukupno osam vrijednosti.

Da biste inicijalizirali međuspremnik s različitim vrijednostima rezerviranog mjesta, prođite sekundu ispuniti parametar:

konst buf_filled = Buffer.alloc(8, 5);
konzola.log (buf_filled);
// izlaz:

Ovaj objekt citira dio u memoriji koji pohranjuje 8 bajtova vrijednosti 05. Imajte na umu da iako ste proslijedili broj kao ispuniti parametar, međuspremnici pohranjuju podatke samo u binarnom obliku.

Nakon dodjele memorije međuspremniku, zapišite podatke pozivom pisati() metoda:

konst buf = Buffer.alloc(8);

buf.write("v", "utf-8");
konzola.log (buf)
// izlaz:

buf.write("va","utf-8");
konzola.log (buf)
// izlaz:

The pisati() metoda koristi kodiranje znakova za pretvaranje prvog parametra, koristeći utf-8 a zatim zapisuje niz u međuspremnik. Dodavanje drugog znaka nizu popunit će drugi bajt.

Za izdvajanje podataka iz postojećih vrsta podataka kao što su nizovi ili nizovi, upotrijebite iz() metoda. Ova metoda stvara međuspremnike od nizova i nizova.

Na primjer:

// Niz
konst stringBuf = Buffer.from('niz')
konzola.log (stringBuf)
// izlaz:

// Niz
konst arrayBuf = Buffer.from([97, 114, 114, 97, 121], 'hex')
konzola.log (arrayBuf);
// izlaz:

The iz() metoda uzima ulaz kao svoj prvi parametar, izračunava broj bajtova koji su mu potrebni za kodiranje podataka, a zatim šalje rezultat međuspremniku. Navođenjem drugog formata kodiranja kao drugog parametra, možete nadjačati zadano kodiranje (UTF-8).

Prosljeđivanje brojeva na iz() metoda će rezultirati pogreškom.

Čitanje međuspremnika

Iako su međuspremnici slični nizovima, ne mogu mijenjati veličinu i mogu se nositi s njima binarni računalni podaci zahvaljujući ugrađenim metodama.

Klasa međuspremnika omogućuje nam čitanje pojedinačnih bajtova njenih podataka pomoću JavaScript sintakse uglatih zagrada.

Na primjer:

konst myBuf = Buffer.from('Rudnik');
konzola.log(MyBuf[1]);
// izlaz: 105

konzola.log(MyBuf[3]);
// izlaz: 101

konzola.log(MyBuf[5]);
// izlaz: nedefinirano

Gornji blok koda koristi sintaksu uglatih zagrada za dobivanje vrijednosti prvog i trećeg bajta u njihovom decimalnom prikazu. Pokušaj dobivanja nevažećeg bajta rezultirat će nedefiniran greška.

Za pristup svim svojim podacima, klasa Buffer dolazi s metodama toJSON() i toString(), koji dobivaju sadržaj u dva različita formata.

The toString() metoda daje string kao sadržaj međuspremnika:

konst myBuf = Buffer.from('Rudnik');
konzola.log(myBuf.toString());
// izlaz: 'Moje'

konst brojBuf = Buffer.from([123]);
konzola.log(brojBuf.toString())
// izlaz: '{'

konst emptyBuf = Buffer.alloc(5);
konzola.log(prazniBuf.toString());
// izlaz: '\\x00\\x00\\x00\\x00\\x00'

Prvi poziv inicijalizira međuspremnik s vrijednošću "Rudnik“, što replicira poziv toString. Drugi primjer koristi polje s jednim int-om za inicijalizaciju, koje ima prikaz niza kao "{” lik. U konačnom slučaju, međuspremnik s pet nulte vrijednosti vraća niz "\x00\x00\x00\x00\x00”. niz \x00 je heksadecimalni prikaz nule.

The toString() metoda uvijek daje rezultat u formatu niza, bez obzira s kojom vrstom podataka inicijalizirate međuspremnik.

The .toJSON() metoda vraća decimalni prikaz podataka međuspremnika, bez obzira na podatke koje ste koristili za inicijalizaciju međuspremnika.

Na primjer:

konst myBuf = Buffer.from('Rudnik');
konzola.log(myBuf.toJSON());
// izlaz: { tip: 'Pufer', podaci: [ 77, 105, 110, 101 ] }

JSON izlaz ima a tip nekretnina u vrijednosti od Pufer da naznači svoje porijeklo. Njegovo svojstvo podataka pohranjuje niz decimala koje predstavljaju izvorni niz bajtova.

Modificiranje međuspremnika

Slično pristupu pojedinačnim bajtovima međuspremnika, također možete modificirati pojedinačne bajtove sadržaja međuspremnika koristeći sintaksu uglatih zagrada.

Kada koristite sintaksu uglatih zagrada za promjenu pojedinačnog sadržaja, možete dodijeliti samo decimalni prikaz vrijednosti.

Na primjer:

mojBuf[0] = 70
konzola.log(myBuf.toString())
// izlaz: 'Dobro'

Budući da su međuspremnici binarni podaci, ne možete određenom dijelu međuspremnika dati niz. Ako pokušate postaviti pojedinačni bajt na niz, međuspremnik će ga prevesti u nulti znak.

Na primjer:

mojBuf[0] = 'F';
konzola.log(myBuf.toString());
// izlaz: '\\x00ine'

Alternativno, možete promijeniti cijeli sadržaj međuspremnika pomoću pisati() metoda.

Razmislite o umetanju indeksa izvan duljine međuspremnika. Umjesto vraćanja pogreške, međuspremnik zanemaruje nevažeći indeks i zadržava izvorni sadržaj međuspremnika netaknutim.

Na primjer, pokušajte postaviti peti element myBuf do r putem njegove decimalne reprezentacije 114:

mojBuf[4] = 114;
konzola.log(myBuf.toString());
// izlaz: 'Moje'

Primijetite da je toString() metoda vraća istu vrijednost 'Rudnik'.

Budući da ne možete promijeniti veličinu međuspremnika, pokušaj upisivanja više podataka nego što jedan može sadržavati rezultirat će odbacivanjem dodatnih podataka. Na primjer:

konst buf1 = Buffer.alloc(5)
buf1.write('broj');
konzola.log(buf1.toString())
// izlaz: 'numbe'

Koristiti toString() metoda za potvrdu podataka međuspremnika, vraća se 'broj' rađe nego 'broj'. Što je umetnuti argument unutar pisati() metoda.

Međuspremnici zapisuju na serijski način počevši od indeksa nula. The pisati() metoda serijski dodaje bajtove u međuspremnik, prepisujući sve prethodne podatke.

Na primjer:

konst buf2 = Buffer.alloc(6);

buf2.write('član');
konzola.log(buf2.toString())
// izlaz: 'član'

buf2.write('bok');
konzola.log(buf2.toString());
// izlaz: 'himber'

Gornji kod stvara međuspremnik od šest bajtova i dodaje niz "član" na to pomoću pisati() metoda.

Zatim ažurira međuspremnik novim sadržajem koji zauzima manje memorijskog prostora od prijašnjeg sadržaja.

To rezultira stvaranjem novog niza s prva dva bajta prebrisana, a preostali bajtovi ostaju nepromijenjeni.

Mnogi API-ji i strukture podataka koriste međuspremnike

Sada znate kako stvoriti međuspremnik, pisati u jedan, čitati njegov sadržaj i modificirati ga odgovarajućim metodama.

Postoji nekoliko drugih dostupnih metoda za rad s klasom međuspremnika Node.js.

Trebali biste poznavati ove metode i razumjeti međuspremnike da biste shvatili kako funkcioniraju različiti koncepti poput tokova i datotečnih sustava.