在教程中,我找到了关于使用流读取数据的示例
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
连接在这种情况下不起作用吗?
有人可以澄清这种混淆吗?
答案 0 :(得分:1)
fs.createReadStream()
采用可选的第二个参数,这是一个选项对象,可以配置读取流的编码。如果未设置编码,则默认为utf8 string。找到该信息需要一段时间,因为它不在文档中,但它是in the code here。
因此,如果您未将编码作为options
参数的属性传递给fs.createReadStream()
,则默认为utf8
。如果要处理二进制数据,则可以将编码配置为null
。 Streams还能够调用.setEncoding(...)
方法来专门设置其编码,尽管它通常在流的构造函数中设置,因为流在创建后通常不会更改其编码。
因此,流的编码确定您是传递utf8字符串还是缓冲区或其他一些编码类型的数据。并且,如果您没有编码(例如二进制),那么当新数据可用时,您将传递Buffer
对象而不是字符串。