JavaScript Tā ir valoda, kas labi pārvalda virknes, taču, tā kā tā sākotnēji tika izstrādāta, lai apstrādātu HTML dokumentus, tā nav pārāk laba bināro datu apstrādē, patiesībā JavaScript nav bināro datu tips kā tāds, tajā ir tikai strukturēti skaitļi vai veidi.
Kā mēs jau zinām Node.js balstīts uz JavaScript un tā var apstrādāt tādus teksta protokolus kā HTTP, kur to var izmantot arī, lai izveidotu saziņu ar datu bāzēm, manipulētu ar attēliem un pat apstrādātu failus, un tā dēļ, ko mēs apspriedām, tas var būt diezgan sarežģīti.
Bet, lai šos bināro manipulāciju uzdevumus padarītu daudz vieglākus, Node.js ietver bināro bufera ieviešanu, kas ļauj mums iegūt un iestatīt izveidotā bufera baitus bez lielām problēmām.
PrasībasLai veiktu šajā apmācībā piedāvātos vingrinājumus, mums ir jābūt funkcionālai instalācijai Node.js mūsu sistēmā mēs varam apskatīt šo pamācību, pirms turpināt tajā iedziļināties. Ir arī svarīgi, lai varētu piekļūt bagātināta teksta redaktoram, lai kodētu piemērus, mēs varam izmantot visu, kas mums šķiet ērti, tomēr, lai to ērti izmantotu, mēs iesakām Cildens teksts o NotePad ++, kuriem ir arī sintakses spraudņi JavaScript Y HTML.
Bufera izveide
Lai izveidotu buferi, tas ir tik vienkārši, kā izveidot jaunu klases eksemplāru Buferis (). Apskatīsim, kā mēs izveidojam vienkāršu buferi, pamatojoties uz UTF-8 kodējumu šādi:
var buf = new Buffer ('Sveika pasaule!'); console.log (buf);Mēs izpildīsim savu piemēru, izmantojot konsoli, lai redzētu atbildi, ko tas mums sniedz Node.js Attiecībā uz mūsu bufera izveidi:
Kā mēs redzam, ja mēs drukājam savu mainīgo mīlulis, atbilde var nebūt tā, ko gaidījām, taču jāatceras, ka mēs veidojam piemēru Buferis un šī klase dara tā satura kodēšanu saskaņā ar īpašu rakstzīmju kodējumu.
Mēs varam arī izveidot virkņu buferi ar citiem kodējumiem, kas būs derīgi, ja mēs norādīsim to pašu, ko otrais arguments, skatīsimies:
var buf2 = jauns buferis ('9b38kte610la', 'base64'); console.log (buf2);Kā redzam, mēs varam bez problēmām norādīt kodējumu, tad redzēsim, kādi kodēšanas veidi tiek pieņemti un to attiecīgie identifikatori:
ascii - ASCIIŠis ir standarta kodēšanas veids, un to ierobežo tāda paša nosaukuma rakstzīmju kodējums.
utf8 - UTF -8Šis ir mainīgais ar kodējumu, kas var attēlot katru esošo Unicode rakstzīmi, un tas ir mūsu bufera noklusējuma kodējums, ja nevienu nenorādāt.
base64 - Base64Šis ir kodēšanas veids, ko izmanto bināro datu attēlošanai virknes formātā. ASCII un to galvenokārt izmanto bināro datu iegulšanai teksta dokumentos, lai nodrošinātu to neskartu transportēšanu.
Turklāt, ja mums nav buferšķīduma sākotnējā satura un mums tas ir jāizveido, mēs to varam izdarīt, norādot tā ietilpību, un mēs to darām šādi:
var buf = jauns buferis (1024);Tādējādi mēs izveidojam 1024 baitu buferi mūsu turpmākajām darbībām.
Baitu apstrāde buferī
Kad buferis ir izveidots vai saņemts, iespējams, vēlēsimies to pārbaudīt un mainīt tā saturu. Pirmkārt, lai piekļūtu tajā esošajiem baitiem, mēs varam izmantot iekavas šādi:
var buf = jauns buferis ('šeit ir mana bufera saturs'); console.log (buf [10]);Ja mēs izmantosim savu piemēru, mēs iegūsim bufera desmito pozīciju, mēs pat varam pārslēgties uz devīto bufera pozīciju un redzēt rezultātu, redzēsim, kā tas izskatās:
Kā redzam, mēs iegūstam nejaušus baitus sava bufera pozīcijām, pat ja mums ir nepieciešams manipulēt ar jebkuras pozīcijas saturu tajā, mēs varam rīkoties šādi:
var buf = jauns buferis ('šeit ir mana jaunā bufera saturs'); buf [2] = 110; buf [6] = 180; buf [10] = 90; console.log (buf [2]); console.log (buf [6]); console.log (buf [10]);Apskatīsim mūsu piemēra konsoles reakciju:
Kā redzējām, mēs varētu bez lielām problēmām mainīt atsevišķu savu bufera pozīciju saturu, turklāt mēs varam iegūt sava bufera lielumu ar īpašumu. garums sekojoši:
var buf = jauns buferis (100); console.log (buf.length);Ja mēs esam novērotāji, mēs redzam, ka mūsu konsoles reakcija būs 100, kur pēc šīs vērtības iegūšanas mēs varam to izmantot, lai atkārtotu mūsu buferi un tādējādi manipulētu ar katru pozīciju, lai iegūtu tās vērtību vai iestatītu noteiktu vērtību. vienkāršs piemērs tam:
var buf = jauns buferis (100); par (var i = 0; i <buf.length; i ++) {buf [i] = i; } console.log (buf);Šajā piemērā mēs izveidojām jaunu buferšķīdums ar 100 baitu ietilpību, un pēc tam mēs iestatām katru baitu ar vērtību, sākot no 0 līdz 99, visbeidzot, redzēsim konsoles reakciju, izpildot mūsu piemēru:
Bufera datu ieguve
Vēl viena interesanta bufera iezīme, tiklīdz mēs to esam izveidojuši vai saņēmuši, ir iespēja iegūt daļu no tā. Mēs varam to "sasmalcināt", lai to kaut kādā veidā pateiktu, un izveidot vēl vienu mazāku buferi ar to daļu, kuru esam sasmalcinājuši, neaizmirstot norādīt, no kurienes un kur to sasmalcināsim. Apskatīsim piemēru, lai ilustrētu to, ko esam paskaidrojuši:
var buffer_complete = new Buffer ("tas ir mana bufera saturs, ko mēs gatavojamies sasmalcināt"); var bufera_small = pilna_buffer.slice (26, 55); console.log (buffer_small.toString ());Kā redzam, vispirms mēs izveidojam sava bufera instanci ar sākotnējo saturu, pēc tam ar funkciju šķēle () Mēs norādām, no kurienes un no kurienes mēs iegūsim saturu, mēs piešķiram iegūto jaunam mainīgajam un, visbeidzot, mēs atšifrējam saturu, lai varētu vizualizēt mūsu otrā bufera saturu, un, izpildot piemērs:
Ir svarīgi pieminēt, ka, izgriežot jaunu buferi, mēs neizmantojam jaunu sistēmas atmiņu, šis jaunais buferis izmanto tēva atmiņu, jo tas tikai uz to attiecas, bet ar atšķirīgu sākumu un beigām. Tas var radīt dažas problēmas, ja neesam piesardzīgi, jo strādājam pie viena bufera, tāpēc mēs iesakām strādāt ar šo metodi kopiju lai izvairītos no problēmām, kuras mēs redzēsim tālāk.
Bufera kopēšana
Kā jau minējām, nogriežot buferšķīdumu, mēs varam iegūt dažas problēmas, ja vien neesam piesardzīgi, taču šim nolūkam mums ir šī metode kopiju, kas ļauj kopēt bufera saturu jaunā buferī, izmantojot jaunu instanci un jaunu atmiņas vietu, redzēsim:
var buferis1 = jauns buferis ("Satura buferis numurs 1, kopējamais saturs"); var buferis2 = jauns buferis (20); var startobj = 0; var startSource = 26; var sourceEnd = 50; buffer1.copy (buffer2, startobj, startSource, endSource); console.log (buffer2.toString ());Kā redzam, mēs izveidojam divus dažādus buferus, kur pirmajam būs saturs, bet otrajam būs tikai izmērs, mēs norādām otrā bufera sākumu un tādā pašā veidā mēs norādām sākumu un beigas jaunu buferi, ko mēs kopēsim, redzēsim konsoles reakciju, izpildot piemēru:
Bufera dekodēšana
Kā redzējām iepriekšējos piemēros, izmantojot šo metodi, mēs varējām izdrukāt sava bufera sākotnējo saturu toString (), tas, ko sauc, ir bufera atšifrēšana, kur, piemēram, klases eksemplārs Buferis () ja mēs neko nenorādām, pēc noklusējuma mēs to atšifrējam UTF-8.
Mēs pat varam veikt virknes pārkodēšanu UTF-8 uz bāze64 lai pieminētu vienu gadījumu, apskatīsim:
var stringutf8 = 'mana jaunā virkne'; var buf = jauns buferis (stringutf8); var base64string = buf.toString ('base64') console.log (base64string);Visbeidzot, redzēsim, kā mēs esam pārkodējuši savu sākotnējo virkni:
Ar to mēs pabeidzam šo apmācību, kurā uzzinājām veidus, kā rīkoties ar binārajiem datiem Node.js paldies klasei Buferis, kas ļauj mums manipulēt ar to, lasot, rakstot, iegūstot nelielus tā gabalus, kopējot to jaunos gadījumos un pat pārveidojot šo buferi jauna veida kodējumam, lai tā varētu manipulēt mūsu programmās.