Lezers zoals jij steunen MUO. Wanneer u een aankoop doet via links op onze site, kunnen we een aangesloten commissie verdienen. Lees verder.

Een buffer is een specifieke locatie in het onbewerkte geheugen. Het dient als tijdelijke opslagruimte voor overtollige binaire gegevens die de verwerkingseenheid op dat moment niet kan accepteren.

Node.js bevat een Buffer-klasse. Het kan omgaan met binaire gegevens bij het beheer van TCP-streams (Transfer Control Protocol) en lees- en schrijfbewerkingen op een bestandssysteem.

Leer hoe u de inhoud van een buffer maakt, leest en wijzigt.

Een buffer maken

Om een ​​buffer in Node.js te maken, gebruikt u de toewijzen() of van() methoden. De toewijzen() methode maakt een nieuwe buffer aan en specificeert de grootte ervan tijdens het maken als de eerste en enige vereiste parameter. Dit is handig wanneer u geen gegevens hebt om op te slaan op het moment dat de buffer wordt gemaakt.

Geef de buffergrootteparameter in bytes op wanneer u een buffer maakt met de toewijzen() methode. Bijvoorbeeld:

const buf = Buffer.alloc(8);
troosten.log (buf);
// uitvoer:

De klasse Buffer voegt automatisch nullen toe als tijdelijke aanduiding voor nieuwe gegevens wanneer u deze maakt met de toewijzen() methode.

De klasse Buffer drukt elke 0-waarde uit als 00, met behulp van hexadecimaal formaat. In dit voorbeeld bevat het in totaal acht waarden.

Geef een seconde de tijd om de buffer te initialiseren met verschillende plaatsaanduidingswaarden vullen parameter:

const buf_gevuld = Buffer.alloc(8, 5);
troosten.log (buf_gevuld);
// uitvoer:

Dit object citeert een deel in het geheugen dat 8 bytes van de waarde opslaat 05. Merk op dat hoewel u een nummer hebt doorgegeven als de vullen parameter slaan buffers alleen gegevens op in binaire vorm.

Na het toewijzen van geheugen aan de buffer, schrijft u gegevens door de schrijven() methode:

const buf = Buffer.alloc(8);

buf.schrijven("v", "utf-8");
troosten.log (buf)
// uitvoer:

buf.schrijven("va","utf-8");
troosten.log (buf)
// uitvoer:

De schrijven() methode gebruikt tekencodering om de eerste parameter te converteren, met behulp van utf-8 en schrijft vervolgens de tekenreeks naar de buffer. Door een tweede teken aan de string toe te voegen, wordt de tweede byte gevuld.

Gebruik de van() methode. Deze methode maakt buffers van strings en arrays.

Bijvoorbeeld:

// Snaar
const stringBuf = Buffer.from('snaar')
troosten.log (stringBuf)
// uitvoer:

// Array
const arrayBuf = Buffer.from([97, 114, 114, 97, 121], 'hex')
troosten.log (arrayBuf);
// uitvoer:

De van() methode neemt de invoer als eerste parameter, berekent het aantal bytes dat nodig is om de gegevens te coderen en stuurt vervolgens het resultaat naar de Buffer. Door een ander coderingsformaat als tweede parameter op te geven, kunt u de standaardcodering (UTF-8) overschrijven.

Nummers doorgeven aan de van() methode resulteert in een fout.

Een buffer lezen

Hoewel Buffers vergelijkbaar zijn met arrays, kunnen ze niet worden aangepast en kunnen ze omgaan met binaire computergegevens dankzij ingebouwde methoden.

Met de klasse Buffer kunnen we individuele bytes van zijn gegevens lezen met behulp van de syntaxis van vierkante haken van JavaScript.

Bijvoorbeeld:

const mijnBuf = Buffer.from('De mijne');
troosten.log(MijnBuf[1]);
// uitvoer: 105

troosten.log(MijnBuf[3]);
// uitvoer: 101

troosten.log(MijnBuf[5]);
// uitvoer: ongedefinieerd

Het bovenstaande codeblok gebruikt de syntaxis van vierkante haken om de waarden van de eerste en derde bytes in hun decimale weergave te verkrijgen. Pogingen om een ​​ongeldige byte te krijgen, resulteren in een ongedefinieerd fout.

Om toegang te krijgen tot al zijn gegevens, wordt de klasse Buffer geleverd met methoden naarJSON() En naarString(), die de inhoud in twee verschillende formaten verkrijgen.

De naarString() methode voert een string uit als de inhoud van de buffer:

const mijnBuf = Buffer.from('De mijne');
troosten.log(mijnBuf.toString());
// uitvoer: 'Mijn'

const nummerBuf = Buffer.from([123]);
troosten.log(nummerBuf.toString())
// uitvoer: '{'

const legeBuf = Buffer.alloc(5);
troosten.log(leegBuf.toString());
// uitvoer: '\\x00\\x00\\x00\\x00\\x00'

De eerste oproep initialiseert de Buffer met de waarde "De mijne”, die de oproep naar toString repliceert. Het tweede voorbeeld gebruikt een single-int array voor initialisatie, die een tekenreeksrepresentatie heeft als de "{" karakter. In het laatste geval een Buffer met vijf nul waarden geeft de tekenreeks terug "\x00\x00\x00\x00\x00”. De snaar \x00 is de hexadecimale weergave van null.

De naarString() methode geeft het resultaat altijd weer in tekenreeksformaat, ongeacht het type gegevens waarmee u de buffer initialiseert.

De .toJSON() methode retourneert de decimale weergave van de buffergegevens, ongeacht de gegevens die u hebt gebruikt om de buffer te initialiseren.

Bijvoorbeeld:

const mijnBuf = Buffer.from('De mijne');
troosten.log(mijnBuf.toJSON());
// uitvoer: { type: 'Buffer', gegevens: [ 77, 105, 110, 101 ] }

De JSON-uitvoer heeft een type onroerend goed met een waarde van Buffer om de oorsprong ervan aan te geven. De eigenschap data slaat een reeks decimalen op die de oorspronkelijke byte-array vertegenwoordigen.

Een buffer wijzigen

Net als bij toegang tot de individuele bytes van een buffer, kunt u ook individuele bytes van de inhoud van een buffer wijzigen met behulp van de syntaxis van vierkante haken.

Wanneer u de syntaxis van vierkante haken gebruikt om een ​​individuele inhoud te wijzigen, kunt u alleen de decimale weergave van de waarde toewijzen.

Bijvoorbeeld:

mijnBuf[0] = 70
troosten.log(mijnBuf.toString())
// uitvoer: 'Fijn'

Omdat buffers binaire gegevens zijn, kunt u geen tekenreeks aan een specifiek deel van een buffer geven. Als u een individuele byte probeert in te stellen op een tekenreeks, vertaalt Buffer deze in een null-teken.

Bijvoorbeeld:

mijnBuf[0] = 'F';
troosten.log(mijnBuf.toString());
// uitvoer: '\\x00ine'

U kunt ook de volledige inhoud van een buffer wijzigen met behulp van de schrijven() methode.

Overweeg een index in te voegen buiten de bufferlengte. In plaats van een fout te retourneren, negeert Buffer de ongeldige index en houdt de originele Buffer-inhoud intact.

Probeer bijvoorbeeld het vijfde element van in te stellen mijnBuf naar R via de decimale weergave van 114:

mijnBuf[4] = 114;
troosten.log(mijnBuf.toString());
// uitvoer: 'Mijn'

Merk op dat de naarString() methode geeft dezelfde waarde terug 'De mijne'.

Aangezien u de grootte van een buffer niet kunt wijzigen, zal het proberen om meer gegevens te schrijven dan één kan bevatten, ertoe leiden dat de extra gegevens worden verwijderd. Bijvoorbeeld:

const buf1 = Buffer.alloc(5)
buf1.schrijven('nummer');
troosten.log(buf1.toString())
// output: 'getal'

De... gebruiken naarString() methode om de buffergegevens te bevestigen, keert het terug 'aantal' liever dan 'nummer'. Dat is het ingevoegde argument in de schrijven() methode.

Buffers schrijven op een seriële manier beginnend bij index nul. De schrijven() methode voegt serieel bytes toe aan een buffer en overschrijft eventuele eerdere gegevens.

Bijvoorbeeld:

const buf2 = Buffer.alloc(6);

buf2.schrijven('lid');
troosten.log(buf2.toString())
// uitvoer: 'lid'

buf2.schrijven('Hoi');
troosten.log(buf2.toString());
// uitvoer: 'himber'

De bovenstaande code maakt een buffer van zes bytes en voegt de tekenreeks "lid" ernaartoe met behulp van de schrijven() methode.

Vervolgens wordt de buffer bijgewerkt met nieuwe inhoud die minder geheugenruimte in beslag neemt dan de eerdere inhoud.

Dit resulteert in de aanmaak van een nieuwe string waarbij de eerste twee bytes worden overschreven en de resterende bytes ongewijzigd blijven.

Veel API's en gegevensstructuren gebruiken buffers

Nu weet u hoe u een buffer kunt maken, ernaar kunt schrijven, de inhoud ervan kunt lezen en deze met de juiste methoden kunt wijzigen.

Er zijn verschillende andere methoden beschikbaar om met de Node.js Buffer-klasse te werken.

U moet deze methoden kennen en Buffers begrijpen om te begrijpen hoe verschillende concepten zoals streams en bestandssystemen werken.