关于使用Node中的流读取数据

时间:2016-10-30 15:50:18

标签: javascript node.js

在教程中,我找到了关于使用流读取数据的示例

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);
});

我有几个问题:

1)因为一个data+= chunk这意味着块是正确的? 否则这种连接将如何发挥作用?

2)但是如果1)为真并且chunk是字符串,为什么编码没有设置?

3)您如何修改此示例以读取二进制文件?当然是 如果数据是二进制的,那么data+=chunk连接在这种情况下不起作用吗?

有人可以澄清这种混淆吗?

1 个答案:

答案 0 :(得分:1)

fs.createReadStream()采用可选的第二个参数,这是一个选项对象,可以配置读取流的编码。如果未设置编码,则默认为utf8 string。找到该信息需要一段时间,因为它不在文档中,但它是in the code here

因此,如果您未将编码作为options参数的属性传递给fs.createReadStream(),则默认为utf8。如果要处理二进制数据,则可以将编码配置为null。 Streams还能够调用.setEncoding(...)方法来专门设置其编码,尽管它通常在流的构造函数中设置,因为流在​​创建后通常不会更改其编码。

因此,流的编码确定您是传递utf8字符串还是缓冲区或其他一些编码类型的数据。并且,如果您没有编码(例如二进制),那么当新数据可用时,您将传递Buffer对象而不是字符串。