JavaScript To je jezik koji dobro rukuje nizovima, ali budući da je u početku bio dizajniran za rukovanje HTML dokumentima, nije baš dobar u rukovanju binarnim podacima, zapravo JavaScript nema binarni tip podataka kao takav, sadrži samo strukturirane brojeve ili vrste.
Kao što već znamo Node.js temelji se na JavaScript i može rukovati tekstualnim protokolima kao što je HTTP, gdje to možete koristiti i za uspostavljanje komunikacije s bazama podataka, manipuliranje slikama, pa čak i rukovanje datotekama, a zbog onoga o čemu smo razgovarali, to može biti samo nizovima.
No kako bi ti zadaci binarne manipulacije bili znatno lakši, Node.js uključuje implementaciju binarnog međuspremnika, što nam omogućuje dobivanje i postavljanje bajtova stvorenog međuspremnika bez većih problema.
ZahtjeviZa izvođenje vježbi predloženih u ovom vodiču moramo imati funkcionalnu instalaciju Node.js u našem sustavu možemo pogledati ovaj vodič prije nego se nastavimo baviti njime. Također je važno imati pristup uređivaču obogaćenog teksta za kodiranje primjera, možemo koristiti sve što nam odgovara, međutim, zbog njegove jednostavnosti korištenja, preporučujemo Uzvišen tekst o NotePad ++ koji također ima dodatke za sintaksu JavaScript Y HTML.
Stvaranje međuspremnika
Za stvaranje međuspremnika jednostavno je napraviti novu instancu klase Pufer(). Pogledajmo kako stvaramo jednostavan međuspremnik na temelju kodiranja UTF-8 na sljedeći način:
var buf = novi međuspremnik ('Zdravo svijete!'); console.log (buf);Izvršit ćemo naš primjer konzolom kako bismo vidjeli odgovor koji nam daje Node.js Što se tiče stvaranja našeg međuspremnika:
Kao što vidimo ispisujemo li našu varijablu buff, odgovor možda nije ono što smo očekivali, ali moramo se sjetiti da stvaramo instancu Pufer a ono što ova klasa radi je kodiranje njezina sadržaja prema specifičnom kodiranju znakova.
Također možemo stvoriti međuspremnik niza s drugim kodiranjima, koji će vrijediti sve dok navedemo isto kao drugi argument, da vidimo:
var buf2 = novi međuspremnik ('9b38kte610la', 'base64'); console.log (buf2);Kao što vidimo, kodiranje možemo navesti bez ikakvih problema, pogledajmo koje su vrste kodiranja prihvaćene i njihove odgovarajuće identifikatore:
ascii - ASCIIOvo je standardni tip kodiranja i ograničen je istoimenim kodiranjem znakova.
utf8 - UTF -8Ovo je varijabla s kodiranjem koja može predstavljati svaki postojeći Unicode znak, a ovo je zadano kodiranje našeg međuspremnika u slučaju da se ne navede.
base64 - Baza64Ovo je vrsta kodiranja koja se koristi za predstavljanje binarnih podataka u vrsti formata niza. ASCII i uglavnom se koristi za ugradnju binarnih podataka u tekstualne dokumente kako bi se osiguralo da podaci ostanu netaknuti u transportu.
Osim toga, ako nemamo početni sadržaj za naš međuspremnik i moramo ga stvoriti, to možemo učiniti navođenjem njegovog kapaciteta, a to činimo na sljedeći način:
var buf = novi međuspremnik (1024);Time radimo ono što stvaramo međuspremnik od 1024 bajta za naše buduće operacije.
Rukovanje bajtovima u međuspremniku
Nakon što smo stvorili ili primili međuspremnik, možda ćemo ga htjeti pregledati i promijeniti njegov sadržaj. Prvo, za pristup bajtovima unutar njega, možemo koristiti zagrade na sljedeći način:
var buf = novi međuspremnik ('ovdje je sadržaj mog međuspremnika'); console.log (buf [10]);Ako pokrenemo naš primjer dobit ćemo desetu poziciju međuspremnika, čak se možemo prebaciti na devetu poziciju međuspremnika i vidjeti rezultat, da vidimo kako to izgleda:
Kao što vidimo, dobivamo nasumične bajtove za položaje našeg međuspremnika, čak i ako trebamo manipulirati sadržajem bilo koje pozicije u njemu, možemo učiniti nešto poput sljedećeg:
var buf = novi međuspremnik ('ovdje je sadržaj mog novog međuspremnika'); buf [2] = 110; buf [6] = 180; buf [10] = 90; console.log (buf [2]); console.log (buf [6]); console.log (buf [10]);Pogledajmo odgovor konzole našeg primjera:
Kao što smo vidjeli, mogli smo bez većih problema mijenjati sadržaj određenih pozicija unutar našeg međuspremnika, osim toga možemo dobiti veličinu našeg međuspremnika sa svojstvom duljina kako slijedi:
var buf = novi međuspremnik (100); console.log (buf.length);Ako smo promatrači, možemo vidjeti da će odgovor naše konzole biti 100, gdje nakon dobivanja ove vrijednosti možemo je koristiti za ponavljanje našeg međuspremnika i na taj način manipulirati svakom pozicijom kako bismo dobili njezinu vrijednost ili postavili određenu vrijednost. jednostavan primjer ovoga:
var buf = novi međuspremnik (100); za (var i = 0; i <buf.length; i ++) {buf [i] = i; } console.log (buf);Ono što smo učinili u ovom primjeru bilo je stvaranje novog pufer s kapacitetom od 100 bajtova, a zatim smo postavili svaki bajt s vrijednošću koja počinje od 0 do 99, na kraju da vidimo odgovor konzole kada izvršimo naš primjer:
Izvlačenje međuspremnika
Još jedna zanimljiva značajka međuspremnika, nakon što ga stvorimo ili primimo, jest mogućnost izdvajanja dijela. Možemo ga "usitniti" da to na neki način izgovorimo i stvoriti još jedan manji međuspremnik s tim dijelom koji smo usitnili, ne zaboravljajući odrediti odakle ćemo ga nasjeckati, pogledajmo primjer koji ilustrira ono što smo objasnili:
var buffer_complete = new Buffer ("ovo je sadržaj mog međuspremnika koji ćemo usitniti"); var buffer_small = full_buffer.slice (26, 55); console.log (buffer_small.toString ());Kao što vidimo, prvo stvaramo instancu našeg međuspremnika s početnim sadržajem, a zatim s funkcijom kriška () Određujemo od i do mjesta gdje ćemo nabaviti sadržaj, dodjeljujemo ono što dobijemo novoj varijabli i na kraju dekodiramo sadržaj kako bismo mogli vizualizirati sadržaj našeg drugog međuspremnika, pogledajmo odgovor pomoću konzole prilikom izvođenja primjer:
Važno je napomenuti da kada izrežemo novi međuspremnik ne koristimo novu sistemsku memoriju, ovaj novi međuspremnik koristi memoriju oca budući da se odnosi samo na njega, ali s različitim početkom i završetkom. To može uzrokovati neke probleme ako ne budemo oprezni jer radimo na istom međuspremniku, zato preporučujemo rad s metodom kopirati kako bismo izbjegli probleme, što ćemo vidjeti u nastavku.
Kopiranje međuspremnika
Kao što smo spomenuli, pri rezanju međuspremnika možemo doći do nekih problema ako nismo oprezni, ali za to imamo metodu kopirati, koji nam omogućuje kopiranje sadržaja međuspremnika u novi međuspremnik, koristeći novu instancu i novi memorijski prostor, da vidimo:
var buffer1 = novi međuspremnik ("Međuspremnik sadržaja 1, sadržaj za kopiranje"); var buffer2 = novi međuspremnik (20); var startobj = 0; var startSource = 26; var sourceEnd = 50; buffer1.copy (buffer2, startobj, startSource, endSource); console.log (buffer2.toString ());Kao što vidimo, stvaramo dva različita međuspremnika, gdje će prvi imati sadržaj, a drugi samo veličinu, određujemo početak za naš drugi međuspremnik, a na isti način označavamo početak i kraj za novi međuspremnik koji ćemo kopirati, pogledajmo odgovor konzole pri izvođenju primjera:
Dekodiranje međuspremnika
Kao što smo vidjeli u prethodnim primjerima, uspjeli smo ispisati izvorni sadržaj našeg međuspremnika pomoću metode toString (), ovo što se zove je dekodiranje međuspremnika, gdje je poput instance klase Pufer() ako ništa ne navedemo, po defaultu to dekodiramo u UTF-8.
Možemo čak i transkodirati niz UTF-8 do base64 da spomenem jedan slučaj, da vidimo:
var stringutf8 = 'moj novi niz'; var buf = novi međuspremnik (stringutf8); var base64string = buf.toString ('base64') console.log (base64string);Na kraju da vidimo kako smo transkodirali naš izvorni niz:
Ovim smo završili ovaj vodič gdje smo naučili načine rada s binarnim podacima u Node.js zahvaljujući razredu Pufer, što nam omogućuje da njime manipuliramo od njegova čitanja, pisanja, dobivanja malih dijelova, kopiranja u nove instance, pa čak i pretvaranja tog međuspremnika u nove vrste kodiranja za njegovu manipulaciju u našim programima.