Buferis ir noteikta vieta neapstrādātajā atmiņā. Tā kalpo kā pagaidu glabāšanas vieta liekajiem binārajiem datiem, kurus apstrādes iekārta konkrētajā brīdī nevar pieņemt.
Node.js ietver bufera klasi. Tas var apstrādāt bināros datus, pārvaldot TCP (Transfer Control Protocol) straumes un lasīšanas-rakstīšanas darbības failu sistēmā.
Uzziniet, kā izveidot, lasīt un mainīt bufera saturu.
Bufera izveide
Lai izveidotu buferi pakalpojumā Node.js, izmantojiet alloc() vai no () metodes. The alloc() metode izveido jaunu buferi, norādot tā lielumu izveides laikā kā pirmo un vienīgo nepieciešamo parametru. Tas ir noderīgi, ja bufera izveides laikā jums nav datu, ko uzglabāt.
Norādiet bufera lieluma parametru baitos, kad veidojat buferi ar alloc() metodi. Piemēram:
konst buf = Buffer.alloc(8);
konsole.log (buf);
// izvade:
Bufera klase automātiski pievieno nulles kā viettura vērtības jauniem datiem, kad tos izveidojat ar alloc() metodi.
Bufera klase katru 0 vērtību izsaka kā 00, izmantojot heksadecimālo formātu. Šajā piemērā tas satur kopumā astoņas vērtības.
Lai inicializētu buferi ar dažādām vietturu vērtībām, pagaidiet vienu sekundi aizpildīt parametrs:
konst buf_filled = Buferis.alloc(8, 5);
konsole.log (buf_filled);
// izvade:
Šis objekts citē atmiņas daļu, kurā tiek saglabāti 8 vērtības baiti 05. Ņemiet vērā, ka, lai gan jūs nodevāt numuru kā aizpildīt parametrs, buferi glabā datus tikai bināros.
Pēc atmiņas piešķiršanas buferim ierakstiet datus, zvanot uz rakstīt () metode:
konst buf = Buffer.alloc(8);
buf.write("v", "utf-8");
konsole.log (buf)
// izvade:
buf.write("va","utf-8");
konsole.log (buf)
// izvade:
The rakstīt () metode izmanto rakstzīmju kodējumu, lai pārveidotu pirmo parametru, izmantojot utf-8 un pēc tam ieraksta virkni buferī. Pievienojot virknei otru rakstzīmi, otrais baits tiks aizpildīts.
Lai iegūtu datus no esošajiem datu tipiem, piemēram, virknēm vai masīviem, izmantojiet no () metodi. Šī metode veido buferus no virknēm un masīviem.
Piemēram:
// Stīga
konst stringBuf = Buferis.from('string')
konsole.log (stringBuf)
// izvade:
// Masīvs
konst arrayBuf = Buferis.from([97, 114, 114, 97, 121], 'hex')
konsole.log (arrayBuf);
// izvade:
The no () metode izmanto ievadi kā savu pirmo parametru, aprēķina baitu skaitu, kas nepieciešams datu kodēšanai, un pēc tam nosūta rezultātu uz buferi. Iesniedzot citu kodēšanas formātu kā otro parametru, varat ignorēt noklusējuma kodējumu (UTF-8).
Ciparu nodošana uz no () metode radīs kļūdu.
Bufera lasīšana
Lai gan buferi ir līdzīgi masīviem, to izmērus nevar mainīt un ar tiem var tikt galā binārie datora dati pateicoties iebūvētajām metodēm.
Bufera klase ļauj mums nolasīt atsevišķus datu baitus, izmantojot JavaScript kvadrātiekavas sintaksi.
Piemēram:
konst myBuf = Buferis.from("Mans");
konsole.log(MyBuf[1]);
// izvade: 105konsole.log(MyBuf[3]);
// izvade: 101
konsole.log(MyBuf[5]);
// izvade: undefined
Iepriekš minētajā koda blokā tiek izmantota kvadrātiekavas sintakse, lai iegūtu pirmā un trešā baita vērtības to decimāldaļās. Mēģinot iegūt nederīgu baitu, tiks parādīts nenoteikts kļūda.
Lai piekļūtu visiem datiem, bufera klasei ir metodes uz JSON() un toString(), kas iegūst saturu divos dažādos formātos.
The toString() metode izvada virkni kā bufera saturu:
konst myBuf = Buferis.from("Mans");
konsole.log(myBuf.toString());
// izvade: 'mine'konst numberBuf = Buferis.from([123]);
konsole.log(numursBuf.toString())
// izvade: '{'
konst emptyBuf = Buffer.alloc(5);
konsole.log(tukšsBuf.toString());
// izvade: '\\x00\\x00\\x00\\x00\\x00'
Pirmais zvans inicializē buferi ar vērtību "Manējais”, ko atkārto izsaukums uz toString. Otrajā piemērā inicializācijai tiek izmantots viena int masīvs, kuram ir virknes attēlojums kā "{” varonis. Pēdējā gadījumā buferis ar pieciem nulles vērtības atgriež virkni "\x00\x00\x00\x00\x00”. Stīga \x00 ir nulles heksadecimālais attēlojums.
The toString() metode vienmēr izvada rezultātu virknes formātā neatkarīgi no tā, ar kāda veida datiem jūs inicializējat buferi.
The .toJSON() metode atgriež bufera datu decimālo attēlojumu neatkarīgi no datiem, ko izmantojāt bufera inicializēšanai.
Piemēram:
konst myBuf = Buferis.from("Mans");
konsole.log(myBuf.toJSON());
// izvade: { veids: "Buferis", dati: [ 77, 105, 110, 101 ] }
JSON izvadei ir a veids īpašumu ar vērtību Buferis lai norādītu tā izcelsmi. Tās datu rekvizīts saglabā decimālzīmju masīvu, kas attēlo sākotnējo baitu masīvu.
Bufera modificēšana
Līdzīgi kā piekļūt atsevišķiem bufera baitiem, varat arī modificēt atsevišķus bufera satura baitus, izmantojot kvadrātiekavās sintaksi.
Izmantojot kvadrātiekavas sintaksi, lai mainītu atsevišķu saturu, varat piešķirt tikai vērtības decimāldaļu.
Piemēram:
myBuf[0] = 70
konsole.log(myBuf.toString())
// izvade: 'Labi'
Tā kā buferi ir bināri dati, noteiktai bufera daļai nevar piešķirt virkni. Ja mēģināt virknei iestatīt atsevišķu baitu, buferis to pārtulkos nulles rakstzīmē.
Piemēram:
myBuf[0] = "F";
konsole.log(myBuf.toString());
// izvade: '\\x00ine'
Varat arī mainīt visu bufera saturu, izmantojot rakstīt () metodi.
Apsveriet iespēju ievietot indeksu ārpus bufera garuma. Tā vietā, lai atgrieztu kļūdu, buferis ignorē nederīgo indeksu un saglabā sākotnējo bufera saturu neskartu.
Piemēram, mēģiniet iestatīt piekto elementu myBuf uz r izmantojot tās decimāldaļu 114:
myBuf[4] = 114;
konsole.log(myBuf.toString());
// izvade: 'mine'
Ievērojiet, ka toString() metode atgriež to pašu vērtību "Mans".
Tā kā jūs nevarat mainīt bufera lielumu, mēģinot ierakstīt vairāk datu, nekā var ietilpt, papildu dati tiks atmesti. Piemēram:
konst buf1 = Buferis.alloc(5)
buf1.write("numurs");
konsole.log(buf1.toString())
// izvade: 'numbe'
Izmantojot toString() metodi, lai apstiprinātu bufera datus, tas atgriežas "numurs" nevis ‘numurs’. Kurš ir iekšā ievietotais arguments rakstīt () metodi.
Buferi raksta sērijveidā, sākot no indeksa nulles. The rakstīt () metode sērijveidā pievieno baitus buferim, pārrakstot visus iepriekšējos datus.
Piemēram:
konst buf2 = Buferis.alloc(6);
buf2.write('biedrs');
konsole.log(buf2.toString())
// izvade: 'biedrs'
buf2.write('Sveiki');
konsole.log(buf2.toString());
// izvade: 'himber'
Iepriekš minētais kods izveido sešu baitu buferi un pievieno virkni "biedrs" uz to, izmantojot rakstīt () metodi.
Pēc tam tas atjaunina buferi ar jaunu saturu, kas aizņem mazāk vietas atmiņā nekā iepriekšējais saturs.
Tā rezultātā tiek izveidota jauna virkne, kurā pirmie divi baiti tiek pārrakstīti un atlikušie baiti netiek mainīti.
Daudzas API un datu struktūras izmanto buferus
Tagad jūs zināt, kā izveidot buferi, rakstīt tajā, lasīt tā saturu un modificēt to ar atbilstošām metodēm.
Ir pieejamas vairākas citas metodes darbam ar Node.js bufera klasi.
Jums jāzina šīs metodes un jāsaprot buferi, lai saprastu, kā darbojas dažādi jēdzieni, piemēram, straumes un failu sistēmas.