2016-10-30 3 views
1

Auf Tutorial lesen fand ich dieses Beispiel über das Lesen von Daten mit Hilfe von Streamsvon Daten mit Hilfe Ströme in Knoten

var fs = require('fs'); 
var readableStream = fs.createReadStream('file.txt'); 
var data = ''; 

readableStream.on('data', function(chunk) { 
    data+=chunk; 
}); 

readableStream.on('end', function() { 
    console.log(data); 
}); 

Ich habe einige Fragen:

1) Da ein data+= chunk tut dies bedeutet, dass die Brocken Zeichenfolge richtig ist ? sonst wie würde diese Verkettung funktionieren?

2) Aber wenn 1) wahr ist und chunk String ist, warum wurde die Codierung nicht eingestellt?

3) Wie würden Sie dieses Beispiel verändern, um eine Binärdatei zu lesen? Sicher würde die data+=chunk Verkettung in diesem Fall nicht funktionieren, wenn Daten binär sind?

Kann jemand bitte diese Verwirrungen klären?

+0

Wenn es sich um eine Binärdatei handelt, verwenden Sie ein Buffer-Objekt, um die Daten statt einer Zeichenfolge zu akkumulieren. – jfriend00

+0

@ jfriend00 ok aber war es nicht notwendig in diesem Beispiel die Codierung so einzustellen, dass Daten als String interpretiert werden? –

Antwort

1

fs.createReadStream() verwendet ein optionales zweites Argument, bei dem es sich um ein Optionsobjekt handelt, in dem die Codierung für das Lesen des Streams konfiguriert werden kann. Wenn keine Codierung festgelegt ist, wird standardmäßig die Zeichenfolge utf8 verwendet. Es dauerte eine Weile, um diese Informationen zu finden, da sie nicht im Dokument enthalten sind, aber es ist in the code here. Wenn Sie die Codierung nicht als Eigenschaft des options-Arguments an fs.createReadStream() übergeben, wird standardmäßig utf8 verwendet. Wenn Sie Binärdaten verarbeiten möchten, können Sie die Codierung auf null konfigurieren. Streams haben auch die Möglichkeit, die .setEncoding(...)-Methode aufzurufen, um ihre Codierung spezifisch festzulegen, obwohl sie normalerweise im Konstruktor für den Stream festgelegt ist, da ein Stream normalerweise nach der Erstellung seine Codierung nicht ändert.

Die Codierung für den Stream bestimmt also, ob Sie eine utf8-Zeichenfolge oder einen Puffer oder einen anderen Codierungstyp von Daten übergeben. Und wenn Sie keine Codierung (z. B. binär) hätten, würden Sie anstelle einer Zeichenfolge ein Buffer-Objekt übergeben, wenn neue Daten verfügbar sind.

+0

du meinst typeof chunk wäre Puffer, wenn es Binärdatei wäre ?? –

+0

und da typeof chunk ist string (es wurde durch stream in string umgewandelt?) In meinem Beispiel Javascript kennt es und verwendet automatisch die richtige Überladung von + = operator? –

+0

@ user200400 - Das 'chunk'-Argument wäre ein Buffer-Objekt, wenn es binär wäre. "Chunk" ist eine Zeichenkette, wenn es utf8 codiert. In Ihrem Beispiel werden also nur zwei Strings hinzugefügt, was eine normale String-Operation ist (nicht wirklich eine Überladung an sich). – jfriend00

Verwandte Themen