Heim >Web-Frontend >js-Tutorial >Detaillierte Einführung in Puffer- und Streaming-Module in Node.js_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.
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
Zusätzlich zum Lesen der Datei, um eine Instanz des Puffers zu erhalten, kann sie auch direkt erstellt werden, zum Beispiel:
Code 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
Code kopieren
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:
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:
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.