Puskuri on tietty paikka raakamuistissa. Se toimii väliaikaisena tallennustilana ylimääräiselle binääritiedolle, jota prosessointiyksikkö ei voi hyväksyä sillä hetkellä.
Node.js sisältää puskuriluokan. Se voi käsitellä binääritietoja, kun se hallitsee TCP (Transfer Control Protocol) -virtoja ja luku- ja kirjoitustoimintoja tiedostojärjestelmässä.
Opi luomaan, lukemaan ja muuttamaan puskurin sisältöä.
Puskurin luominen
Puskurin luomiseen Node.js: ssä käytä alloc() tai alkaen () menetelmiä. The alloc() menetelmä luo uuden puskurin ja määrittää sen koon luonnin aikana ensimmäisenä ja ainoana pakollisena parametrina. Se on hyödyllinen, kun sinulla ei ole tallennettavia tietoja puskurin luomisen aikana.
Määritä puskurin kokoparametri tavuina, kun luot puskurin alloc() menetelmä. Esimerkiksi:
konst buf = Puskuri.alloc(8);
konsoli.log (buf);
// lähtö:
Puskuriluokka lisää automaattisesti nollia paikkamerkkiarvoiksi uusille tiedoille, kun luot sen kanssa
alloc() menetelmä.Puskuriluokka ilmaisee jokaisen 0-arvon muodossa 00, käyttäen heksadesimaalimuotoa. Tässä esimerkissä se sisältää yhteensä kahdeksan arvoa.
Jos haluat alustaa puskurin eri paikkamerkkiarvoilla, anna sekunti täyttää parametri:
konst buf_filled = Puskuri.alloc(8, 5);
konsoli.log (buf_filled);
// lähtö:
Tämä objekti lainaa muistin osan, joka tallentaa 8 tavua arvosta 05. Huomaa, että vaikka välitit numeron täyttää parametri, puskurit tallentavat tiedot vain binäärimuodossa.
Kun olet varannut muistia puskurille, kirjoita tiedot soittamalla kirjoittaa() menetelmä:
konst buf = Puskuri.alloc(8);
buf.write("v", "utf-8");
konsoli.log (buf)
// lähtö:
buf.write("va","utf-8");
konsoli.log (buf)
// lähtö:
The kirjoittaa() -menetelmä käyttää merkkikoodausta ensimmäisen parametrin muuntamiseen käyttämällä utf-8 ja kirjoittaa sitten merkkijonon puskuriin. Toisen merkin lisääminen merkkijonoon täyttää toisen tavun.
Voit poimia tietoja olemassa olevista tietotyypeistä, kuten merkkijonoista tai taulukoista, käyttämällä alkaen () menetelmä. Tämä menetelmä luo puskureita merkkijonoista ja taulukoista.
Esimerkiksi:
// Merkkijono
konst stringBuf = Puskuri.from("merkkijono")
konsoli.log (stringBuf)
// lähtö:
// Joukko
konst arrayBuf = Puskuri.from([97, 114, 114, 97, 121], "heksa")
konsoli.log (arrayBuf);
// lähtö:
The alkaen () menetelmä ottaa syötteen ensimmäiseksi parametriksi, laskee datan koodaamiseen tarvittavien tavujen määrän ja lähettää sitten tuloksen puskuriin. Kun annat toisen koodausmuodon toiseksi parametriksi, voit ohittaa oletuskoodauksen (UTF-8).
Numeroiden välittäminen alkaen () menetelmä johtaa virheeseen.
Puskurin lukeminen
Vaikka puskurit ovat samanlaisia kuin taulukot, niiden kokoa ei voi muuttaa ja niitä voidaan käsitellä binaariset tietokonetiedot sisäänrakennettujen menetelmien ansiosta.
Puskuriluokka antaa meille mahdollisuuden lukea yksittäisiä tavuja sen tiedoista JavaScriptin hakasulkeiden syntaksilla.
Esimerkiksi:
konst myBuf = Puskuri.from('Kaivos');
konsoli.Hirsi(MyBuf[1]);
// lähtö: 105konsoli.Hirsi(MyBuf[3]);
// lähtö: 101
konsoli.Hirsi(MyBuf[5]);
// lähtö: undefined
Yllä oleva koodilohko käyttää hakasulkeiden syntaksia saadakseen ensimmäisen ja kolmannen tavun arvot niiden desimaalimuodossa. Jos yritetään saada virheellinen tavu, tuloksena on määrittelemätön virhe.
Puskuriluokan kaikkiin tietoihin pääsemiseksi tulee menetelmiä toJSON() ja toString(), jotka saavat sisällön kahdessa eri muodossa.
The toString() menetelmä tulostaa merkkijonon puskurin sisällöksi:
konst myBuf = Puskuri.from('Kaivos');
konsoli.Hirsi(myBuf.toString());
// lähtö: 'Minu'konst numberBuf = Puskuri.from([123]);
konsoli.Hirsi(numeroBuf.toString())
// lähtö: '{'
konst emptyBuf = Puskuri.alloc(5);
konsoli.Hirsi(tyhjäBuf.toString());
// lähtö: \\x00\\x00\\x00\\x00\\x00
Ensimmäinen kutsu alustaa puskurin arvolla "Kaivos”, jonka kutsu toStringille toistaa. Toisessa esimerkissä käytetään alustamiseen single-int-taulukkoa, jonka merkkijonoesitys on "{”hahmo. Viimeisessä tapauksessa puskuri, jossa on viisi nolla-arvot palauttaa merkkijonon "\x00\x00\x00\x00\x00”. Jousi \x00 on nollan heksadesimaaliesitys.
The toString() menetelmä tulostaa tuloksen aina merkkijonomuodossa riippumatta siitä, minkä tyyppisillä tiedoilla alustat puskurin.
The .toJSON() -menetelmä palauttaa puskurin tietojen desimaalimuodon riippumatta siitä, mitä tietoja käytit puskurin alustamiseen.
Esimerkiksi:
konst myBuf = Puskuri.from('Kaivos');
konsoli.Hirsi(myBuf.toJSON());
// lähtö: { tyyppi: 'Puskuri', tiedot: [ 77, 105, 110, 101 ] }
JSON-ulostulossa on a tyyppi omaisuutta, jonka arvo on Puskuri osoittamaan sen alkuperää. Sen dataominaisuus tallentaa joukon desimaalilukuja, jotka edustavat alkuperäistä tavutaulukkoa.
Puskurin muokkaaminen
Samalla tavalla kuin puskurin yksittäisiä tavuja käytettäessä, voit myös muokata puskurin sisällön yksittäisiä tavuja käyttämällä hakasulkeiden syntaksia.
Kun käytät hakasulkeiden syntaksia yksittäisen sisällön muuttamiseen, voit määrittää vain arvon desimaalimuodon.
Esimerkiksi:
myBuf[0] = 70
konsoli.Hirsi(myBuf.toString())
// lähtö: 'hyvä'
Koska puskurit ovat binääritietoja, et voi antaa tietylle puskurin osalle merkkijonoa. Jos yrität asettaa yksittäisen tavun merkkijonoksi, puskuri kääntää sen nollamerkiksi.
Esimerkiksi:
myBuf[0] = "F";
konsoli.Hirsi(myBuf.toString());
// lähtö: '\\x00ine'
Vaihtoehtoisesti voit muuttaa puskurin koko sisältöä käyttämällä kirjoittaa() menetelmä.
Harkitse indeksin lisäämistä puskurin pituuden ulkopuolelle. Virheen palauttamisen sijaan puskuri jättää virheellisen indeksin huomioimatta ja säilyttää alkuperäisen puskurin sisällön ennallaan.
Yritä esimerkiksi asettaa viides elementti myBuf to r sen desimaalimuodon kautta 114:
myBuf[4] = 114;
konsoli.Hirsi(myBuf.toString());
// lähtö: 'Minu'
Huomaa, että toString() menetelmä palauttaa saman arvon 'Kaivos'.
Koska et voi muuttaa puskurin kokoa, ylimääräisten tietojen hylkääminen yritetään kirjoittaa enemmän tietoja kuin mihin mahtuu. Esimerkiksi:
konst buf1 = Puskuri.alloc(5)
buf1.write('määrä');
konsoli.Hirsi(buf1.toString())
// lähtö: 'numbe'
Käyttämällä toString() menetelmä vahvistaa puskurin tiedot, se palauttaa ’nikko’ mielummin kuin 'määrä'. Mikä on lisätty argumentti sisällä kirjoittaa() menetelmä.
Puskurit kirjoittavat sarjamuodossa alkaen indeksistä nolla. The kirjoittaa() menetelmä lisää sarjassa tavuja puskuriin ja korvaa kaikki aiemmat tiedot.
Esimerkiksi:
konst buf2 = Puskuri.alloc(6);
buf2.write('jäsen');
konsoli.Hirsi(buf2.toString())
// lähtö: 'jäsen'
buf2.write('Hei');
konsoli.Hirsi(buf2.toString());
// lähtö: 'himber'
Yllä oleva koodi luo kuuden tavun puskurin ja lisää merkkijonon "jäsen" siihen käyttämällä kirjoittaa() menetelmä.
Sitten se päivittää puskurin uudella sisällöllä, joka vie vähemmän muistitilaa kuin aikaisempi sisältö.
Tämä johtaa uuden merkkijonon luomiseen, jossa kaksi ensimmäistä tavua kirjoitetaan päälle ja loput tavut jätetään muuttamattomiksi.
Monet sovellusliittymät ja tietorakenteet käyttävät puskureita
Nyt osaat luoda puskurin, kirjoittaa siihen, lukea sen sisällön ja muokata sitä sopivilla menetelmillä.
Node.js-puskuriluokan kanssa on käytettävissä useita muita menetelmiä.
Sinun tulisi tuntea nämä menetelmät ja ymmärtää puskurit ymmärtääksesi, kuinka erilaiset käsitteet, kuten virrat ja tiedostojärjestelmät, toimivat.