Heim >Web-Frontend >js-Tutorial >Was ist Buffer in NodeJS und detaillierte Erläuterung der Anwendungsbeispiele

Was ist Buffer in NodeJS und detaillierte Erläuterung der Anwendungsbeispiele

伊谢尔伦
伊谢尔伦Original
2017-07-24 10:56:252718Durchsuche

Der sogenannte Pufferpuffer bedeutet „temporärer Speicherbereich“, ein Speicherabschnitt, in dem Eingabe- und Ausgabedaten vorübergehend gespeichert werden.

Die JS-Sprache selbst hat nur einen String-Datentyp und keinen Binärdatentyp, daher stellt NodeJS einen globalen Konstruktorpuffer bereit, der String entspricht, um Operationen für Binärdaten bereitzustellen. Zusätzlich zum Lesen der Datei, um eine Instanz von Buffer zu erhalten, kann sie beispielsweise auch direkt erstellt werden:

 var buffer = new Buffer([ 0x68, 0x65, 0x6c, 0x6c, 0x6f ]) ;

Buffer ähnelt einer Zeichenfolge Zusätzlich zur Verwendung des .length-Attributs zum Abrufen Bytelänge können Sie auch die Methode [index] verwenden, um die Bytes an der angegebenen Position zu lesen, zum Beispiel:

buffer[0] ; // 0x68;

Puffer und Zeichenfolge können ineinander konvertiert werden, Sie können beispielsweise die angegebene verwenden Kodierung zum Konvertieren von Binärdaten in eine Zeichenfolge:

var str = buffer.toString("utf-8");  // hello

Konvertieren Sie die Zeichenfolge in Binärdaten unter der angegebenen Kodierung:

var buffer= new Buffer("hello", "utf-8") ; // <Buffer 68 65 6c 6c 6f>

Ein kleiner Unterschied:

Puffer hat ein wichtiger Unterschied zur Saite. Die Zeichenfolge ist schreibgeschützt und jede Änderung an der Zeichenfolge führt zu einer neuen Zeichenfolge, während die ursprüngliche Zeichenfolge unverändert bleibt.

Puffer ähnelt eher einem C-Spracharray, das Zeigeroperationen ausführen kann. Sie können beispielsweise die Methode [index] verwenden, um die Bytes an einer bestimmten Position direkt zu ändern. Die

slice-Methode gibt keinen neuen Puffer zurück, sondern einen Zeiger auf eine Position in der Mitte des ursprünglichen Puffers, wie unten gezeigt.

[ 0x68, 0x65, 0x6c, 0x6c, 0x6f ]
^ ^
|. Wirkt sich auf den ursprünglichen Puffer aus, zum Beispiel:

Wenn Sie möchten Wenn Sie einen Puffer kopieren, müssen Sie zunächst einen neuen Puffer erstellen und die Daten über die .copy-Methode in den ursprünglichen Puffer kopieren.
 var buffer= new Buffer([ 0x68, 0x65, 0x6c, 0x6c, 0x6f ]) ;
 var sub = bin.slice(2) ;
 sub[0] = 0x65 ;
 console.log(buffer) ; //  <Buffer 68 65 65 6c 6f>

Dies ähnelt der Beantragung eines neuen Speichers und dem Kopieren der Daten in den vorhandenen Speicher. Unten finden Sie ein Beispiel.

Kurz gesagt: Buffer erweitert die Datenverarbeitungsfähigkeiten von JS von Strings auf beliebige Binärdaten.
var buffer= new Buffer([ 0x68, 0x65, 0x6c, 0x6c, 0x6f ]) ;
 var dup = new Buffer(bin.length) ;
 buffer.copy(dup) ;
 dup[0] = 0x48 ;
 console.log(buffer) ;  // <Buffer 68 65 6c 6c 6f>
 console.log(dup) ;  // <Buffer 48 65 65 6c 6f>

Zusammenfassend


(1): JavaScript eignet sich für die Verarbeitung von Unicode-codierten Daten, ist jedoch nicht für die Verarbeitung von Binärdaten geeignet.

(2), daher ist es bei der Verarbeitung von TCP-Streams oder Dateisystemen erforderlich, Oktett-Streams zu verarbeiten.

(3) Node verfügt über mehrere Methoden zum Verarbeiten, Erstellen und Konsumieren von Oktettströmen.
(4), die Originaldaten werden in einer Buffer-Instanz gespeichert. Ein Buffer ähnelt einem Integer-Array, sein Speicher wird jedoch außerhalb des V8-Stacks zugewiesen. Die Größe eines Puffers kann nicht geändert werden.
(5), die verarbeiteten Codierungstypen sind: ASCII, UTF8, UTF16LE, UCS2 (Alias ​​von UTF16LE), Base64, Binär, Hex.
(6), Buffer ist ein globales Element und Sie können eine Buffer-Instanz direkt mit new Buffer() abrufen.

Das obige ist der detaillierte Inhalt vonWas ist Buffer in NodeJS und detaillierte Erläuterung der Anwendungsbeispiele. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn