Ein Puffer ist ein bestimmter Ort im Rohspeicher. Es dient als temporärer Speicherplatz für überschüssige Binärdaten, die die Verarbeitungseinheit gerade nicht aufnehmen kann.
Node.js enthält eine Buffer-Klasse. Es kann mit Binärdaten umgehen, wenn es TCP-Streams (Transfer Control Protocol) und Lese-/Schreibvorgänge auf einem Dateisystem verwaltet.
Erfahren Sie, wie Sie den Inhalt eines Puffers erstellen, lesen und ändern.
Erstellen eines Puffers
Um einen Puffer in Node.js zu erstellen, verwenden Sie die zuordnen() oder aus() Methoden. Der zuordnen() -Methode erstellt einen neuen Puffer, dessen Größe während der Erstellung als erster und einziger erforderlicher Parameter angegeben wird. Dies ist nützlich, wenn Sie zum Zeitpunkt der Puffererstellung keine Daten zum Speichern haben.
Geben Sie den Puffergrößenparameter in Byte an, wenn Sie einen Puffer mit erstellen zuordnen() Methode. Zum Beispiel:
konst buf = Buffer.alloc(8);
Konsole.log (buff);
// Ausgang:
Die Buffer-Klasse fügt automatisch Nullen als Platzhalterwerte für neue Daten hinzu, wenn Sie sie mit der erstellen zuordnen() Methode.
Die Buffer-Klasse drückt jeden 0-Wert aus als 00, im Hexadezimalformat. In diesem Beispiel enthält es insgesamt acht Werte.
Um den Puffer mit anderen Platzhalterwerten zu initialisieren, übergeben Sie eine Sekunde füllen Parameter:
konst buf_filled = Buffer.alloc(8, 5);
Konsole.log (buf_gefüllt);
// Ausgang:
Dieses Objekt zitiert einen Teil im Speicher, der 8 Bytes des Werts speichert 05. Beachten Sie, dass Sie zwar eine Zahl als übergeben haben füllen -Parameter speichern Puffer Daten nur im Binärformat.
Nachdem Sie dem Puffer Speicher zugewiesen haben, schreiben Sie Daten, indem Sie die aufrufen schreiben() Methode:
konst buf = Buffer.alloc(8);
buf.write ("v", "utf-8");
Konsole.log (buff)
// Ausgang:
buf.write ("va","utf-8");
Konsole.log (buff)
// Ausgang:
Der schreiben() -Methode verwendet die Zeichencodierung, um den ersten Parameter zu konvertieren, using utf-8 und schreibt dann die Zeichenfolge in den Puffer. Das Hinzufügen eines zweiten Zeichens zur Zeichenfolge füllt das zweite Byte.
Um Daten aus vorhandenen Datentypen wie Strings oder Arrays zu extrahieren, verwenden Sie die aus() Methode. Diese Methode erstellt Puffer aus Strings und Arrays.
Zum Beispiel:
// Zeichenkette
konst stringBuf = Buffer.from('Schnur')
Konsole.log (stringBuf)
// Ausgang:
// Array
konst arrayBuf = Buffer.from([97, 114, 114, 97, 121], 'verhexen')
Konsole.log (arrayBuf);
// Ausgang:
Der aus() -Methode nimmt die Eingabe als ersten Parameter, berechnet die Anzahl der Bytes, die zum Codieren der Daten erforderlich sind, und sendet das Ergebnis dann an den Buffer. Indem Sie als zweiten Parameter ein anderes Codierungsformat angeben, können Sie die Standardcodierung (UTF-8) überschreiben.
Übergabe von Nummern an die aus() Methode führt zu einem Fehler.
Lesen eines Puffers
Obwohl Puffer Arrays ähnlich sind, sind sie nicht in der Größe veränderbar und können damit umgehen binäre Computerdaten dank eingebauter Methoden.
Die Buffer-Klasse ermöglicht es uns, einzelne Bytes ihrer Daten mit der JavaScript-Syntax für eckige Klammern zu lesen.
Zum Beispiel:
konst myBuf = Buffer.from('Mine');
Konsole.Protokoll(MeinBuf[1]);
// Ausgabe: 105Konsole.Protokoll(MeinBuf[3]);
// Ausgabe: 101
Konsole.Protokoll(MeinBuf[5]);
// Ausgabe: undefiniert
Der obige Codeblock verwendet die Syntax mit eckigen Klammern, um die Werte des ersten und dritten Bytes in ihrer Dezimaldarstellung zu erhalten. Der Versuch, ein ungültiges Byte zu erhalten, führt zu einem nicht definiert Fehler.
Um auf alle ihre Daten zuzugreifen, verfügt die Buffer-Klasse über Methoden zuJSON() Und toString(), die die Inhalte in zwei unterschiedlichen Formaten erhalten.
Der toString() -Methode gibt einen String als Pufferinhalt aus:
konst myBuf = Buffer.from('Mine');
Konsole.Protokoll(meinBuf.toString());
// Ausgabe: 'Mine'konst numberBuf = Buffer.from([123]);
Konsole.Protokoll(NummerBuf.toString())
// Ausgang: '{'
konst emptyBuf = Buffer.alloc(5);
Konsole.Protokoll(leerBuf.toString());
// Ausgabe: '\\x00\\x00\\x00\\x00\\x00'
Der erste Aufruf initialisiert den Buffer mit dem Wert „Mine“, die der Aufruf von toString repliziert. Das zweite Beispiel verwendet ein Single-Int-Array zur Initialisierung, das eine Zeichenfolgendarstellung als „{” Charakter. Im letzten Fall ein Buffer mit fünf Nullwerte gibt die Zeichenkette „\x00\x00\x00\x00\x00”. Die Saite \x00 ist die hexadezimale Darstellung von null.
Der toString() -Methode gibt das Ergebnis immer im String-Format aus, unabhängig davon, mit welcher Art von Daten Sie den Buffer initialisieren.
Der .toJSON() -Methode gibt die Dezimaldarstellung der Pufferdaten zurück, unabhängig von den Daten, die Sie zum Initialisieren des Puffers verwendet haben.
Zum Beispiel:
konst myBuf = Buffer.from('Mine');
Konsole.Protokoll(meinBuf.toJSON());
// Ausgang: { Typ: 'Puffer', Daten: [ 77, 105, 110, 101 ] }
Die JSON-Ausgabe hat eine Typ Eigentum mit einem Wert von Puffer um auf seine Herkunft hinzuweisen. Seine data-Eigenschaft speichert ein Array von Dezimalstellen, die das ursprüngliche Byte-Array darstellen.
Ändern eines Puffers
Ähnlich wie beim Zugriff auf die einzelnen Bytes eines Puffers können Sie auch einzelne Bytes des Inhalts eines Puffers mithilfe der Syntax mit eckigen Klammern ändern.
Bei Verwendung der eckigen Klammer-Syntax zum Ändern eines einzelnen Inhalts können Sie nur die dezimale Darstellung des Wertes zuweisen.
Zum Beispiel:
meinBuf[0] = 70
Konsole.Protokoll(meinBuf.toString())
// Ausgabe: 'Gut'
Da Puffer Binärdaten sind, können Sie einem bestimmten Teil eines Puffers keine Zeichenfolge zuweisen. Wenn Sie versuchen, ein einzelnes Byte in einen String zu setzen, übersetzt Buffer es in ein Nullzeichen.
Zum Beispiel:
meinBuf[0] = 'F';
Konsole.Protokoll(meinBuf.toString());
// Ausgabe: '\\x00ine'
Alternativ können Sie den gesamten Inhalt eines Puffers mit ändern schreiben() Methode.
Erwägen Sie, einen Index außerhalb der Länge des Puffers einzufügen. Anstatt einen Fehler zurückzugeben, ignoriert Buffer den ungültigen Index und behält den ursprünglichen Buffer-Inhalt bei.
Versuchen Sie beispielsweise, das fünfte Element von festzulegen meinBuf Zu R über seine dezimale Darstellung von 114:
myBuf[4] = 114;
Konsole.Protokoll(meinBuf.toString());
// Ausgabe: 'Mine'
Beachten Sie, dass die toString() Methode gibt denselben Wert zurück 'Mine'.
Da Sie die Größe eines Puffers nicht ändern können, führt der Versuch, mehr Daten zu schreiben, als einer aufnehmen kann, dazu, dass die zusätzlichen Daten verworfen werden. Zum Beispiel:
konst buf1 = Buffer.alloc(5)
buff1.write ('Nummer');
Konsole.Protokoll(buff1.toString())
// Ausgabe: 'Zahl'
Verwendung der toString() Methode zum Bestätigen der Pufferdaten zurück 'Zahl' statt 'Nummer'. Welches ist das eingefügte Argument in der schreiben() Methode.
Puffer schreiben seriell, beginnend bei Index Null. Der schreiben() -Methode fügt einem Puffer seriell Bytes hinzu und überschreibt alle vorherigen Daten.
Zum Beispiel:
konst buf2 = Buffer.alloc(6);
buff2.write ('Mitglied');
Konsole.Protokoll(buf2.toString())
// Ausgabe: 'Mitglied'
buff2.write ('Hi');
Konsole.Protokoll(buf2.toString());
// Ausgabe: 'himber'
Der obige Code erstellt einen Sechs-Byte-Puffer und fügt die Zeichenfolge „Mitglied" dazu mit der schreiben() Methode.
Anschließend aktualisiert er den Puffer mit neuem Inhalt, der weniger Speicherplatz beansprucht als der frühere Inhalt.
Dies führt zur Erstellung einer neuen Zeichenfolge, wobei die ersten beiden Bytes überschrieben und die verbleibenden Bytes unverändert gelassen werden.
Viele APIs und Datenstrukturen verwenden Puffer
Jetzt wissen Sie, wie Sie einen Puffer erstellen, in einen Puffer schreiben, seinen Inhalt lesen und ihn mit den entsprechenden Methoden ändern.
Es stehen mehrere andere Methoden zur Verfügung, um mit der Buffer-Klasse von Node.js zu arbeiten.
Sie sollten diese Methoden kennen und Puffer verstehen, um zu verstehen, wie verschiedene Konzepte wie Streams und Dateisysteme funktionieren.