Buferių tvarkymas „Node.js“

„JavaScript“ Tai kalba, kuri gerai tvarko eilutes, tačiau kadangi ji iš pradžių buvo sukurta HTML dokumentams tvarkyti, ji nelabai gerai tvarko dvejetainius duomenis, iš tikrųjų „JavaScript“ neturi dvejetainių duomenų tipo, yra tik struktūrizuoti skaičiai arba tipai.

Kaip jau žinome Node.js paremtas „JavaScript“ ir jis gali tvarkyti tekstinius protokolus, tokius kaip HTTP, kur taip pat galite tai naudoti užmegzti ryšį su duomenų bazėmis, manipuliuoti vaizdais ir netgi tvarkyti failus, o dėl to, ką aptarėme, tai padaryti gali būti tik sudėtinga.

Tačiau norint palengvinti šias dvejetaines manipuliavimo užduotis, Node.js apima dvejetainį buferio diegimą, kuris leidžia mums be didelių problemų gauti ir nustatyti sukurto buferio baitus.

ReikalavimaiNorėdami atlikti šioje pamokoje siūlomus pratimus, turime turėti funkcinį diegimą Node.js mūsų sistemoje galime pažvelgti į šią mokymo programą, prieš tęsdami jos gilinimąsi. Taip pat svarbu turėti galimybę pasiekti turtingo teksto redaktorių, kad būtų galima koduoti pavyzdžius, mes galime naudoti viską, kas mums atrodo patogu, tačiau dėl patogumo rekomenduojame Aukščiausias tekstas o „NotePad ++“, kurie taip pat turi sintaksės papildinius „JavaScript“ Y HTML.

Buferio kūrimas


Sukurti buferį yra taip paprasta, kaip sukurti naują klasės egzempliorių Buferis (). Pažiūrėkime, kaip mes sukuriame paprastą buferį, pagrįstą UTF-8 kodavimu, taip:
 var buf = naujas buferis ('Hello world!'); console.log (buf);
Mes vykdysime savo pavyzdį per konsolę, kad pamatytume atsakymą, kurį jis mums duoda Node.js Kalbant apie mūsų buferio sukūrimą:

Kaip matome, jei spausdiname savo kintamąjį mėgėjas, atsakymas gali būti ne toks, kokio tikėjomės, tačiau turime prisiminti, kad kuriame pavyzdį Buferis ir tai, ką ši klasė daro, yra jo turinio kodavimas pagal konkretų simbolių kodavimą.

Taip pat galime sukurti eilutės buferį su kitais kodavimais, kurie galios tol, kol nurodysime tą patį, ką ir antrasis argumentas, pažiūrėkime:

 var buf2 = naujas buferis ('9b38kte610la', 'base64'); console.log (buf2);
Kaip matome, mes galime nurodyti kodavimą be jokių problemų, pažiūrėkime, kokie kodavimo tipai yra priimami ir jų atitinkami identifikatoriai:

ascii - ASCIITai yra standartinis kodavimo tipas ir jį riboja to paties pavadinimo simbolių kodavimas.
utf8 - UTF -8Tai kintamasis su kodavimu, kuris gali pavaizduoti kiekvieną esamą „Unicode“ simbolį, ir tai yra numatytasis mūsų buferio kodavimas, jei jo nenurodote.
base64 - „Base64“Tai yra kodavimo tipas, naudojamas dvejetainiams duomenims atvaizduoti eilutės formatu. ASCII ir dažniausiai naudojamas dvejetainiams duomenims įterpti į tekstinius dokumentus, siekiant užtikrinti, kad duomenys išliktų nepakitę.
Be to, jei neturime buferio pradinio turinio ir turime jį sukurti, tai galime padaryti nurodydami jo talpą, o tai darome taip:

 var buf = naujas buferis (1024);
Tokiu būdu mes sukuriame 1024 baitų buferį būsimoms operacijoms.

Baitų tvarkymas buferyje


Sukūrę arba gavę buferį, galbūt norėsime jį patikrinti ir pakeisti jo turinį. Pirma, norėdami pasiekti joje esančius baitus, skliaustus galime naudoti taip:
 var buf = naujas buferis ('čia yra mano buferio turinys'); console.log (buf [10]);
Jei atliksime savo pavyzdį, gausime dešimtąją buferio poziciją, galime net pereiti į devintąją buferio poziciją ir pamatyti rezultatą, pažiūrėkime, kaip jis atrodo:

Kaip matome, mes gauname atsitiktinius baitus savo buferio pozicijoms, net jei mums reikia manipuliuoti bet kurios pozicijos turiniu, galime padaryti kažką panašaus:

 var buf = naujas buferis ('čia yra mano naujojo buferio turinys'); buf [2] = 110; buf [6] = 180; buf [10] = 90; console.log (buf [2]); console.log (buf [6]); console.log (buf [10]);
Pažvelkime į mūsų pavyzdžio konsolės atsakymą:

Kaip matėme, be didelių problemų galėtume pakeisti tam tikrų savo buferio pozicijų turinį, be to, su nuosavybe galime gauti savo buferio dydį ilgio taip:

 var buf = naujas buferis (100); console.log (buf.length);
Jei esame stebėtojai, matome, kad mūsų konsolės atsakymas bus 100, kur, gavę šią vertę, galėsime ją naudoti kartodami savo buferį ir taip manipuliuodami kiekviena pozicija, kad gautume jos vertę arba nustatytume konkrečią vertę. paprastas to pavyzdys:
 var buf = naujas buferis (100); (var i = 0; i <buf.length; i ++) {buf [i] = i; } console.log (buf);
Šiame pavyzdyje mes sukūrėme naują buferis su 100 baitų talpa ir tada mes nustatome kiekvieną baitą, kurio vertė prasideda nuo 0 iki 99, pagaliau pažiūrėkime konsolės atsaką, kai vykdysime savo pavyzdį:

Buferio duomenų išgavimas


Kitas įdomus buferio bruožas, kai jį sukūrėme ar gavome, yra galimybė išgauti jo dalį. Mes galime jį „susmulkinti“ tam tikru būdu ir sukurti kitą mažesnį buferį su ta dalimi, kurią susmulkinome, nepamirštant nurodyti, iš kur ir kur ją supjaustysime, pažiūrėkime pavyzdį, iliustruojantį tai, ką paaiškinome:
 var buffer_complete = naujas Buferis ("tai yra mano buferio turinys, kurį ketiname pjaustyti"); var buffer_small = full_buffer.slice (26, 55); console.log (buffer_small.toString ());
Kaip matome, pirmiausia sukuriame savo buferio egzempliorių su pradiniu turiniu, tada su funkcija gabalas () Mes nurodome, iš kur ir kur gausime turinį, mes priskiriame tai, ką gauname, naujam kintamajam ir galiausiai iššifruojame turinį, kad galėtume vizualizuoti antrojo buferio turinį, pažiūrėkime konsolės atsakymą vykdant pavyzdys:

Svarbu paminėti, kad kai mes pjauname naują buferį, mes nenaudojame naujos sistemos atminties, šis naujas buferis naudoja tėvo atmintį, nes jis tik nurodo ją, bet turi kitokią pradžią ir pabaigą. Tai gali sukelti tam tikrų problemų, jei nebūsime atsargūs, nes dirbame su tuo pačiu buferiu, todėl rekomenduojame dirbti su metodu kopija kad išvengtumėte problemų, kurias pamatysime žemiau.

Buferio kopijavimas


Kaip jau minėjome, pjaustydami buferį galime susidurti su tam tikromis problemomis, jei nesame atsargūs, tačiau tam turime metodą kopija, kuri leidžia mums nukopijuoti buferio turinį į naują buferį, naudojant naują egzempliorių ir naują atminties vietą, pažiūrėkime:
 var buferis1 = naujas buferis ("Turinio buferis numeris 1, turinys, kurį reikia kopijuoti"); var buferis2 = naujas buferis (20); var startobj = 0; var startSource = 26; var sourceEnd = 50; buffer1.copy (buffer2, startobj, startSource, endSource); console.log (buffer2.toString ());
Kaip matome, sukuriame du skirtingus buferius, kur pirmasis turės turinį, o antrasis - tik dydį, mes nurodome antrojo buferio pradžią ir taip pat nurodome pradžią ir pabaigą. naują buferį, kurį nukopijuosime, pažiūrėkime konsolės atsakymą vykdant pavyzdį:

Buferio dekodavimas


Kaip matėme ankstesniuose pavyzdžiuose, naudodami šį metodą galėjome atspausdinti originalų buferio turinį toString (), tai, kas vadinama, yra buferio dekodavimas, kur, kaip ir klasės egzempliorius Buferis () jei nieko nenurodome, pagal numatytuosius nustatymus dekoduojame UTF-8.

Mes netgi galime perkoduoti eilutę UTF-8 į bazė64 Norėdami paminėti vieną atvejį, pažiūrėkime:

 var stringutf8 = 'mano nauja eilutė'; var buf = naujas buferis (stringutf8); var base64string = buf.toString ('base64') console.log (base64string);
Galiausiai pažiūrėkime, kaip perkodavome pradinę eilutę:

Tuo baigiame šią pamoką, kurioje išmokome dvejetainių duomenų tvarkymo būdų Node.js ačiū klasei Buferis, kuri leidžia mums manipuliuoti ja nuo skaitymo, rašymo, mažų jos dalių gavimo, kopijavimo į naujus egzempliorius ir net to buferio pavertimo naujais kodavimo tipais, kad būtų galima manipuliuoti mūsų programose.

wave wave wave wave wave