Heim Web-Frontend js-Tutorial Detaillierte Einführung in Puffer- und Streaming-Module in Node.js_node.js

Detaillierte Einführung in Puffer- und Streaming-Module in Node.js_node.js

May 16, 2016 pm 04:14 PM
node.js 缓冲

Puffermodul

js wurde ursprünglich für Browser entwickelt und kann daher gut mit Unicode-codierten Zeichenfolgen umgehen, Binärdaten jedoch nicht. Dies ist ein Problem bei Node.js, da Node.js darauf ausgelegt ist, Daten über das Netzwerk zu senden und zu empfangen, häufig im Binärformat. Zum Beispiel:

– Daten über TCP-Verbindung senden und empfangen; - Binärdaten aus Bildern oder komprimierten Dateien lesen
- Daten aus dem Dateisystem lesen und schreiben; - Binäre Datenströme aus dem Netzwerk verarbeiten

Das Buffer-Modul bringt eine Methode zum Speichern von Rohdaten in Node.js mit, sodass Binärdaten im Kontext von js verwendet werden können. Immer wenn Sie Daten verarbeiten müssen, die in E/A-Vorgängen in Node.js verschoben werden, können Sie das Buffer-Modul verwenden.

Klasse: Puffer

Die Buffer-Klasse ist ein globaler Variablentyp, der zur direkten Verarbeitung von Binärdaten verwendet wird. Es kann auf verschiedene Arten aufgebaut werden.

Die Originaldaten werden in einer Instanz der Buffer-Klasse gespeichert. Eine Buffer-Instanz ähnelt einem Integer-Array

1.neuer Puffer (Größe): Ordnen Sie einen neuen Puffer zu, dessen Größe 8-Bit-Bytes beträgt

2. Neuer Puffer (Array): Ordnen Sie einen neuen Puffer mithilfe eines 8-Bit-Byte-Arrays zu 3.new Buffer(str, [encoding]):encoding String-Typ – welche Codierungsmethode verwendet werden soll, die Parameter sind optional.


4. Klassenmethode: Buffer.isEncoding(encoding): Wenn die angegebene Codierung gültig ist, geben Sie true zurück, andernfalls geben Sie false zurück.
5. Klassenmethode: Buffer.isBuffer(obj): Testen Sie, ob dieses obj ein Buffer ist. Return Boolean

6. Klassenmethode: Buffer.concat(list, [totalLength]): Array-Typ {Array} auflisten, Pufferarray, das zur Verbindung verwendet wird. totalLength {Number}-Typ Die Gesamtgröße aller Puffer im obigen Pufferarray.

Zusätzlich zum Lesen der Datei, um eine Instanz des Puffers zu erhalten, kann sie auch direkt erstellt werden, zum Beispiel:



Code kopieren Der Code lautet wie folgt: var bin = new Buffer([ 0x48, 0x65, 0x6c, 0x6c, 0x6c ]);


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


Code kopieren Der Code lautet wie folgt: bin[0]; // => 0x48;

Puffer und Strings können ineinander umgewandelt werden. Beispielsweise können Binärdaten mit der angegebenen Kodierung in Strings umgewandelt werden:


Code kopieren Der Code lautet wie folgt: var str = bin.toString('utf-8'); // =>
Die .slice-Methode gibt keinen neuen Puffer zurück, sondern eher einen Zeiger auf eine Position in der Mitte des ursprünglichen Puffers zurück, wie unten gezeigt.



Code kopieren
Der Code lautet wie folgt: 1.[ 0x48, 0x65, 0x6c, 0x6c, 0x6c ] 2. ^ ^ ^
3. |. |
4. bin bin.slice(2)




Schreibpuffer


Code kopieren

Der Code lautet wie folgt: var buffer = new Buffer(8);//Erstelle einen Puffer mit 8 Byte Speicher console.log(buffer.write('a','utf8'));//Ausgabe 1

Dadurch wird das Zeichen „a“ in den Puffer geschrieben und der Knoten gibt die Anzahl der nach der Codierung in den Puffer geschriebenen Bytes zurück. Die UTF-8-Kodierung des Buchstabens a belegt hier 1 Byte.

Puffer kopieren

Node.js bietet eine Methode zum Kopieren des gesamten Inhalts eines Buffer-Objekts in ein anderes Buffer-Objekt. Wir können nur zwischen vorhandenen Pufferobjekten kopieren, daher müssen sie erstellt werden.


Code kopieren

Der Code lautet wie folgt: buffer.copy(bufferToCopyTo)

Unter diesen ist bufferToCopyTo das zu kopierende Zielpufferobjekt. Beispiel unten:


Code kopieren

Der Code lautet wie folgt:

var buffer1 = neuer Puffer(8);
buffer1.write('nice to meet you','utf8');
var buffer2 = neuer Puffer(8);
buffer1.copy(buffer2);
console.log(buffer2.toString());//Schön dich kennenzulernen

Stream-Modul

In UNIX-Betriebssystemen sind Streams ein Standardkonzept. Es gibt drei Hauptströme:

1.Standardeingabe
2.Standardausgabe
3.Standardfehler

Lesbarer Stream

Wenn Node.js mit Puffern Rohdaten verarbeitet, dann sind Streams normalerweise die Art und Weise, wie Node.js Daten verschiebt. Streams in Node.js sind entweder lesbar oder beschreibbar. Viele Module in Node.js verwenden Streams, einschließlich HTTP und das Dateisystem.

Angenommen, wir erstellen eine Datei „classmates.txt“ und lesen daraus eine Liste mit Namen, um diese Daten zu verwenden. Da es sich bei den Daten um einen Stream handelt, bedeutet dies, dass Sie ab den ersten paar Bytes auf die Daten reagieren können, bevor Sie mit dem Lesen der Datei fertig sind. Dies ist ein häufiges Muster in Node.js:

Code kopieren Der Code lautet wie folgt:

var fs = require('fs');
var stream = fs.ReadStream('classmates.txt');
stream.setEncoding('utf8');
stream.on('data', function (chunk) {
console.log('einige Daten lesen')
});
stream.on('close', function () {
console.log('alle Daten werden gelesen')
});

Im obigen Beispiel werden die Ereignisdaten ausgelöst, wenn neue Daten empfangen werden. Das Schließereignis wird ausgelöst, wenn das Lesen der Datei abgeschlossen ist.

Beschreibbarer Stream

Natürlich können wir auch beschreibbare Streams erstellen, in die Daten geschrieben werden. Das bedeutet, dass Sie mit einem einfachen Skript einen Stream verwenden können, um in eine Datei einzulesen und dann in eine andere Datei zu schreiben:

Code kopieren Der Code lautet wie folgt:

var fs = require('fs');
var readableStream = fs.ReadStream('classmates.txt');
var writableStream = fs.writeStream('names.txt');
readableStream.setEncoding('utf8');
readableStream.on('data', function (chunk) {
writableStream.write(chunk);
});
readableStream.on('close', function () {
writableStream.end();
});

Wenn ein Datenereignis empfangen wird, werden die Daten nun in den beschreibbaren Stream geschrieben.

readable.setEncoding(encoding): return: this

readable.resume(): Wie oben. Mit dieser Methode kann der lesbare Stream weiterhin Datenereignisse auslösen.

readable.pause(): Wie oben. Diese Methode bewirkt, dass ein Stream im Fließmodus das Auslösen von Datenereignissen stoppt, in den Nicht-Flussmodus wechselt und nachfolgende verfügbare Daten im internen Puffer belässt.
Klasse: stream.Writable

Die beschreibbare Stream-Schnittstelle ist eine Abstraktion der Daten, die Sie auf ein Ziel schreiben.

1.writable.write(chunk, [encoding], [callback]):

chunk {String |. Buffer} Zu schreibende Daten
Kodierung {String} Kodierung, wenn Chunk ein String ist
Rückruf {Funktion} Rückruf, nachdem der Datenblock geschrieben wurde
Gibt zurück: {Boolean} true, wenn die Daten vollständig verarbeitet wurden.

Diese Methode schreibt Daten in das zugrunde liegende System und ruft den angegebenen Rückruf auf, nachdem die Daten verarbeitet wurden.

2.writable.cork(): Erzwingt, dass alle Schreibvorgänge bestehen bleiben.

Die beibehaltenen Daten werden geschrieben, wenn .uncork() oder .end() aufgerufen wird.

3.writable.end([chunk], [encoding], [callback])

chunk {String |. Buffer} optional, zu schreibende Daten
Kodierung {String} Kodierung, wenn Chunk ein String ist
Rückruf {Funktion} optional, Rückruf nach Ende des Streams
Der Aufruf von write() nach dem Aufruf von end() erzeugt einen Fehler.

Code kopieren Der Code lautet wie folgt:

// Schreiben Sie „Hallo“ und enden Sie mit „Welt!“. http.createServer(function (req, res) {
res.write('hello, ');
res.end('world!');
// Es ist jetzt kein weiteres Schreiben mehr erlaubt
});

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP formatiert Zeilen in CSV und schreibt Dateizeiger PHP formatiert Zeilen in CSV und schreibt Dateizeiger Mar 22, 2024 am 09:00 AM

In diesem Artikel wird ausführlich erläutert, wie PHP Zeilen in CSV formatiert und Dateizeiger schreibt. Ich hoffe, dass Sie nach dem Lesen dieses Artikels etwas daraus lernen können. Zeilen in CSV formatieren und in den Dateizeiger schreiben Schritt 1: Dateizeiger öffnen $file=fopen("path/to/file.csv","w"); in CSV-Strings umwandeln. Die Funktion akzeptiert die folgenden Parameter: $file: Dateizeiger $fields: CSV-Felder als Array $delimiter: Feldtrennzeichen (optional) $enclosure: Feldanführungszeichen (

Ein Artikel über Speichersteuerung in Node Ein Artikel über Speichersteuerung in Node Apr 26, 2023 pm 05:37 PM

Der nicht blockierende und ereignisgesteuerte Knotendienst hat den Vorteil eines geringen Speicherverbrauchs und eignet sich sehr gut für die Verarbeitung massiver Netzwerkanforderungen. Unter der Voraussetzung massiver Anfragen müssen Probleme im Zusammenhang mit der „Speicherkontrolle“ berücksichtigt werden. 1. Der Garbage-Collection-Mechanismus und die Speicherbeschränkungen von V8 Js wird von der Garbage-Collection-Maschine gesteuert

Detaillierte grafische Erläuterung des Speichers und des GC der Node V8-Engine Detaillierte grafische Erläuterung des Speichers und des GC der Node V8-Engine Mar 29, 2023 pm 06:02 PM

Dieser Artikel vermittelt Ihnen ein detailliertes Verständnis des Speichers und Garbage Collectors (GC) der NodeJS V8-Engine. Ich hoffe, er wird Ihnen hilfreich sein!

Node.js 19 ist offiziell veröffentlicht, lassen Sie uns über seine 6 Hauptfunktionen sprechen! Node.js 19 ist offiziell veröffentlicht, lassen Sie uns über seine 6 Hauptfunktionen sprechen! Nov 16, 2022 pm 08:34 PM

Node 19 wurde offiziell veröffentlicht. Dieser Artikel wird Ihnen eine detaillierte Erklärung der 6 Hauptfunktionen von Node.js 19 geben. Ich hoffe, er wird Ihnen hilfreich sein!

Lassen Sie uns ausführlich über das File-Modul in Node sprechen Lassen Sie uns ausführlich über das File-Modul in Node sprechen Apr 24, 2023 pm 05:49 PM

Das Dateimodul ist eine Kapselung der zugrunde liegenden Dateioperationen, wie z. B. Lesen/Schreiben/Öffnen/Schließen/Löschen von Dateien, Hinzufügen usw. Das größte Merkmal des Dateimoduls besteht darin, dass alle Methoden zwei Versionen von **synchronem** und **bereitstellen. asynchron**, mit Methoden mit dem Suffix sync sind alle Synchronisationsmethoden, und diejenigen ohne sind alle heterogene Methoden.

Lassen Sie uns darüber sprechen, wie Sie das beste Node.js-Docker-Image auswählen. Lassen Sie uns darüber sprechen, wie Sie das beste Node.js-Docker-Image auswählen. Dec 13, 2022 pm 08:00 PM

Die Auswahl eines Docker-Images für Node mag trivial erscheinen, aber die Größe und potenziellen Schwachstellen des Images können erhebliche Auswirkungen auf Ihren CI/CD-Prozess und Ihre Sicherheit haben. Wie wählen wir also das beste Node.js-Docker-Image aus?

Was soll ich tun, wenn der Knoten den Befehl npm nicht verwenden kann? Was soll ich tun, wenn der Knoten den Befehl npm nicht verwenden kann? Feb 08, 2023 am 10:09 AM

Der Grund, warum der Knoten den Befehl npm nicht verwenden kann, liegt darin, dass die Umgebungsvariablen nicht richtig konfiguriert sind. Die Lösung ist: 1. Öffnen Sie „Systemeigenschaften“ 2. Suchen Sie nach „Umgebungsvariablen“ -> „Systemvariablen“ und bearbeiten Sie dann die Umgebung Variablen; 3. Suchen Sie den Speicherort des NodeJS-Ordners. 4. Klicken Sie auf „OK“.

Lassen Sie uns über den GC-Mechanismus (Garbage Collection) in Node.js sprechen Lassen Sie uns über den GC-Mechanismus (Garbage Collection) in Node.js sprechen Nov 29, 2022 pm 08:44 PM

Wie führt Node.js GC (Garbage Collection) durch? Der folgende Artikel führt Sie durch.

See all articles