Heim  >  Artikel  >  Web-Frontend  >  Wie geht Node.js mit Streams um? Wie stelle ich die Stream-Kodierung ein?

Wie geht Node.js mit Streams um? Wie stelle ich die Stream-Kodierung ein?

PHPz
PHPzOriginal
2023-04-07 09:27:16567Durchsuche

Node.js ist ein ereignisgesteuertes asynchrones E/A-Framework, das als Ausführungsumgebung für JavaScript auf dem Server bezeichnet werden kann. Aufgrund seiner Single-Threaded-, nicht blockierenden E/A-, ereignisgesteuerten und anderen Eigenschaften wird es häufig verwendet. Bei der Verarbeitung von Dateiströmen muss die Codierung festgelegt werden, um Probleme wie verstümmelte Zeichen zu vermeiden.

Node.js verarbeitet Streams

Der Stream (Stream) von Node.js ist eine abstrakte Schnittstelle, die zur Verarbeitung großer Datensammlungen verwendet werden kann. Streams implementieren die Datenübertragung auf ähnliche Weise wie eine Pipeline und teilen die Daten zur Verarbeitung in Teile auf, ohne dass man warten muss, bis die gesamte Datensammlung angezeigt wird, bevor man mit dem nächsten Schritt fortfährt. Daher können Streams den Speicherbedarf und die Verarbeitungszeit bei der Verarbeitung großer Datenmengen oder großer Dateien erheblich reduzieren.

Node.js verfügt über vier grundlegende Stream-Objekte, nämlich Readable, Writable, Duplex und Transform. Unter ihnen werden lesbare und beschreibbare Streams am häufigsten verwendet. ReadableWritableDuplexTransform。其中Readable和Writable流应用得最广。

Readable流可以理解为输入流,它把数据读入到Node.js中进行处理。Writable流是输出流,它把数据输出到目标位置。可以将两种流进行组合使用,例如管道(pipe),可以处理数据的传输。

Node.js流操作的过程中,可能会出现中文乱码的问题。这时我们需要设置编码解决该问题。

设置流编码

在Node.js中,流的编码是使用setEncoding()方法来设定的。可对可读流和可写流进行编码设定。

例如,对一个可读流进行编码设定,如下所示:

const fs = require('fs');

const readableStream = fs.createReadStream('test.txt', 'utf8');
readableStream.setEncoding('utf8');

此时,可读流会按照编码类型将数据分段读取,并将分段数据输出。同样,对于可写流,也可以使用setEncoding()方法来设定编码。例如:

const fs = require('fs');

const writableStream = fs.createWriteStream('output.txt', 'utf8');
writableStream.setEncoding('utf8');

需要注意的是,在Node.js V8.0.0版本之前,设置流编码只对字符串有效,如果想要读写二进制数据,则需要使用Buffer对象。

因此,在读写非字符串数据时,若想使用编码,则需要在读写时将数据进行序列化和反序列化,如下所示:

const fs = require('fs');
const data = { name: 'Node.js' };
const str = JSON.stringify(data);

const readableStream = fs.createReadStream('test.txt', 'binary');
const writableStream = fs.createWriteStream('output.txt', 'binary');
writableStream.write(new Buffer(str, 'utf8'));

这样,我们就可以在Node.js流的处理过程中,使用编码来避免乱码等问题。

总结

Node.js流处理非常适合处理大数据集和大文件的情景。在处理流数据时,要注意设定编码,避免出现中文乱码等问题。在Node.js V8.0.0版本之前,设置编码只对字符串有效,如需处理非字符串数据,需要使用Buffer

Der lesbare Stream kann als Eingabestream verstanden werden, der Daten zur Verarbeitung in Node.js einliest. Ein beschreibbarer Stream ist ein Ausgabestream, der Daten an einen Zielort ausgibt. Zwei Streams können wie eine Pipe kombiniert werden, um die Datenübertragung abzuwickeln. 🎜🎜Während des Node.js-Stream-Betriebsprozesses kann das Problem verstümmelter chinesischer Zeichen auftreten. Zu diesem Zeitpunkt müssen wir die Codierung festlegen, um dieses Problem zu lösen. 🎜🎜Stream-Kodierung festlegen🎜🎜In Node.js wird die Kodierung des Streams mithilfe der Methode setEncoding() festgelegt. Es können Kodierungseinstellungen für lesbare und beschreibbare Streams vorgenommen werden. 🎜🎜Stellen Sie beispielsweise die Codierung für einen lesbaren Stream wie folgt ein: 🎜rrreee🎜Zu diesem Zeitpunkt liest der lesbare Stream die Daten in Segmenten entsprechend dem Codierungstyp und gibt die segmentierten Daten aus. Ebenso können Sie für beschreibbare Streams auch die Methode setEncoding() verwenden, um die Codierung festzulegen. Zum Beispiel: 🎜rrreee🎜Es ist zu beachten, dass das Festlegen der Stream-Codierung vor der Version Node.js V8.0.0 nur für Zeichenfolgen gültig ist. Wenn Sie Binärdaten lesen und schreiben möchten, müssen Sie den Puffer verwenden Objekt. 🎜🎜Wenn Sie also beim Lesen und Schreiben von Nicht-String-Daten die Codierung verwenden möchten, müssen Sie die Daten beim Lesen und Schreiben serialisieren und deserialisieren, wie unten gezeigt: 🎜rrreee🎜Auf diese Weise können wir Node.js verwenden Während Bei der Stream-Verarbeitung wird eine Codierung verwendet, um Probleme wie verstümmelte Zeichen zu vermeiden. 🎜🎜Zusammenfassung🎜🎜Die Stream-Verarbeitung von Node.j eignet sich sehr gut für die Verarbeitung großer Datensätze und großer Dateien. Achten Sie bei der Verarbeitung von Stream-Daten auf die Einstellung der Codierung, um Probleme wie verstümmelte chinesische Zeichen zu vermeiden. Vor Node.js V8.0.0 war die Einstellung der Codierung nur für Strings gültig. Wenn Sie Nicht-String-Daten verarbeiten müssen, müssen Sie das Buffer-Objekt verwenden, um die Daten zu serialisieren und zu deserialisieren. 🎜

Das obige ist der detaillierte Inhalt vonWie geht Node.js mit Streams um? Wie stelle ich die Stream-Kodierung ein?. 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