Puffermodul
JS war ursprünglich für Browser konzipiert, sodass es mit Unicode-kodierten Saiten gut umgehen kann, aber es kann jedoch keine Binärdaten gut verarbeiten. Dies ist ein Problem mit node.js, da Node.js zum Senden und Empfangen von Daten ausgelegt ist, die häufig im Netzwerk im binären Format übertragen werden. 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ärdatenströme aus dem Netzwerk verarbeiten
Das Puffermodul bietet eine Methode zum Node.js, um Rohdaten zu speichern, sodass binäre Daten im Kontext von JS verwendet werden können. Immer wenn Daten in E/A -Operationen in Node.js verarbeitet werden müssen, ist es möglich, das Puffermodul zu verwenden.
Klasse: Puffer
Die Pufferklasse ist ein globaler variabler Typ, der zur direkten Verarbeitung von Binärdaten verwendet wird. Es kann auf verschiedene Arten gebaut werden.
Die Rohdaten werden in einer Instanz der Pufferklasse gespeichert. Eine Pufferinstanz ähnelt einer Reihe von ganzen Zahlen
1. Neue Puffer (Größe): Zuweisen Sie eine neue Puffergröße 8-Bit-Bytes, deren Größe ist.
2.NEW Buffer (Array): Weisen Sie einen neuen Puffer zur Verwendung eines 8-Bit-Byte-Arrays zu.
3.NEW Buffer (STR, [Codierung]): Coding String Typ-What Codierungsmethode wird verwendet, und die Parameter sind optional.
4. Klassenmethode: Buffer.ISencoding (Codierung): Return true, wenn die angegebene Codierungscodierung gültig ist, ansonsten false zurückgeben.
5. Klassenmethode: Buffer.ISBuffer (OBJ): Testen Sie, ob dieser OBJ ein Puffer ist. Gibt boolean zurück
6. Klassenmethode: Buffer.concat (Liste, [TotalLength]): List {Array} Array -Typ, Puffer -Array, früher angeschlossen. Totallength {Zahl} Geben Sie die Gesamtgröße aller Puffer des obigen Pufferarrays an.
Zusätzlich zum Lesen von Dateien, um Pufferinstanzen zu erhalten, kann es auch direkt konstruiert werden, beispielsweise:
Die Codekopie lautet wie folgt:
var bin = neuer Buffer ([0x48, 0x65, 0x6c, 0x6c, 0x6c]);
Puffer ähnelt einer Zeichenfolge. Zusätzlich zur Verwendung des Attributs .Length, um die Bytelänge zu erhalten, können Sie auch die [Index] -Methode verwenden, um die Bytes an der angegebenen Position zu lesen, z. B.:
Die Codekopie lautet wie folgt:
Bin [0]; // => 0x48;
Puffer und String können ineinander konvertiert werden. Beispielsweise können binäre Daten unter Verwendung einer angegebenen Codierung in Zeichenfolgen konvertiert werden:
Die Codekopie lautet wie folgt:
var str = bin.toString ('utf-8'); // => "Hallo"
Anstatt einen neuen Puffer zurückzugeben, gibt die .Slice -Methode einen Zeiger an einen Ort in der Mitte des Originalpuffers zurück, wie unten gezeigt.
Die Codekopie lautet wie folgt:
1. [0x48, 0x65, 0x6c, 0x6c, 0x6c]
2. ^ ^ ^
3. | |
4. Bin bin.lice (2)
Schreiben Sie in den Puffer
Die Codekopie lautet wie folgt:
var buffer = neuer Puffer (8); // Erstellen Sie einen Puffer mit 8 Bytes des Speicherspeichers
console.log (buffer.write ('a', 'utf8'); // Ausgabe 1
Dies schreibt den Charakter "A" in den Puffer, und der Knoten gibt die Anzahl der in den Puffer geschriebenen Bytes zurück, nachdem er codiert wurde. Die UTF-8-Codierung des Buchstabens A hier nimmt 1 Byte auf.
Puffer kopieren
Node.js bietet eine Methode, um den gesamten Inhalt des Pufferobjekts in ein anderes Pufferobjekt zu kopieren. Wir können nur zwischen vorhandenen Pufferobjekten kopieren, daher müssen wir sie erstellen.
Die Codekopie lautet wie folgt:
Puffer.Copy (Buffertocopyto)
Unter ihnen ist BuffertoCopyto das zu kopierende Zielpufferobjekt. Das folgende Beispiel:
Die Codekopie lautet wie folgt:
var buffer1 = neuer Puffer (8);
Buffer1.Write ('Schön, dich zu treffen', 'utf8');
var buffer2 = neuer Puffer (8);
Buffer1.Copy (Buffer2);
console.log (buffer2.toString ()); // schön dich zu treffen
Stream -Modul
In UNIX -Typ -Betriebssystemen ist Streaming ein Standardkonzept. Es gibt drei Hauptströme wie folgt:
1. Standardeingang
2. Standardausgang
3. Standardfehler
Lesbarer Stream
Wenn der Puffer die Art und Weise ist, wie Node.js Rohdaten behandelt, ist der Stream normalerweise die Art und Weise, wie Node.js Daten bewegt. Streams in node.js sind lesbar oder beschreibbar. Viele Module in node.js verwenden Streams, einschließlich HTTP- und Dateisysteme.
Nehmen wir an, wir erstellen eine klassenkameraden.txt -Datei und lesen die Namensliste daraus, damit wir diese Daten verwenden können. Da Daten ein Stream sind, bedeutet dies, dass Sie vor Abschluss der Dateilesen auf die Daten aus den ersten empfangenen Bytes reagieren können. Dies ist ein gemeinsames Muster in Node.js:
Die Codekopie lautet wie folgt:
var fs = fordert ('fs');
var stream = fs.readstream ('classmates.txt');
stream.setencoding ('utf8');
Stream.on ('Data', Funktion (Chunk) {
console.log ('einige Daten lesen')
});
stream.on ('close', function () {
console.log ('Alle Daten werden gelesen')
});
Im obigen Beispiel werden Ereignisdaten ausgelöst, wenn neue Daten empfangen werden. Das Schließereignis wird ausgelöst, wenn die Lesen der Datei abgeschlossen ist.
Beschreibbarer Strom
Offensichtlich können wir auch einen beschreibbaren Stream erstellen, um Daten zu schreiben. Dies bedeutet, dass nur ein einfaches Skript verwendet werden kann, um in die Datei in eine andere Datei zu schreiben:
Die Codekopie lautet wie folgt:
var fs = fordert ('fs');
var readablestream = fs.readstream ('classMates.txt');
var WriteABLESTREAM = fs.WritEstream ('names.txt');
readablErtream.setEnDing ('utf8');
readablestream.on ('data', function (chunk) {
WriteABLESTREAM.Write (Chunk);
});
readablestream.on ('close', function () {
WriteABlestream.end ();
});
Wenn nun ein Datenereignis empfangen wird, werden die Daten in den beschreibbaren Stream geschrieben.
lesbar.setEncoding (Codierung): Rückgabe: Dies
lesbar.Resume (): Gleich wie oben. Mit dieser Methode kann der lesbare Stream das Datenereignis weiter auslösen.
lesbar.pause (): Gleich wie oben. Diese Methode bewirkt, dass ein Stream im Durchflussmodus das Auslösen des Datenereignisses nicht mehr ausgelöst, in den Nicht-Flow-Modus wechselt und nachfolgende verfügbare Daten im internen Puffer hinterlassen.
Klasse: Stream.writable
Die beschreibbare Stream -Schnittstelle ist eine Abstraktion der Daten, die Sie an ein Ziel schreiben.
1.Wrable.Write (Chunk, [Codierung], [Callback]):
Chunk {String | Puffer} Daten zu schreiben
Codierung {String} -Codierung, wenn Chunk eine Zeichenfolge ist
Rückruf {Funktion} Rückruf nach dem Schreiben von Datenblockieren
Rückgabe: {boolean} true, wenn die Daten alle verarbeitet wurden.
Diese Methode schreibt Daten in das zugrunde liegende System und ruft den angegebenen Rückruf nach der Verarbeitung der Daten auf.
2.Wrable.cork (): gezwungen, alle Schreibvorgänge zu fangen.
Die festgefahrenen Daten werden geschrieben, wenn der Anruf von .unkork () oder .end () aufgerufen wird.
3.Wrable.end ([Chunk], [Codierung], [Rückruf])
Chunk {String | Puffer} optional, Daten zu schreiben
Codierung {String} -Codierung, wenn Chunk eine Zeichenfolge ist
Rückruf {Funktion} Optional, Rückruf nach dem Ende des Streams
Das Aufrufen von Write () nach dem Aufrufen von End () generiert ein Fehler.
Die Codekopie lautet wie folgt:
// schreibe 'Hallo' und ende dann mit 'World!'
http.createServer (Funktion (req, res) {{
Res.Write ('Hallo');
res.end ('Welt!');
// jetzt darf nicht weiter schreiben
});