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

在教程中,我find了关于使用stream读取数据的例子

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这意味着块是string权? 否则这个连接将如何工作?

2)但是,如果1)是真的, chunk是string,为什么编码没有设置?

3)如何修改这个例子来读取二进制文件? 如果数据是二进制数据,在这种情况下肯定data+=chunk连接不起作用。

有人可以澄清这个混乱吗?

fs.createReadStream()接受一个可选的第二个参数,它是一个可以configuration读取stream的编码的选项对象。 如果没有设置编码,则默认为utf8string。 find这个信息需要一段时间,因为它不在文档中,但是在代码中 。

所以,如果你没有将编码作为options参数的属性传递给fs.createReadStream() ,那么它默认为utf8 。 如果你想处理二进制数据,那么你可以configuration编码为null 。 stream也可以调用.setEncoding(...)方法来专门设置它们的编码,尽pipe它通常在stream的构造函数中设置,因为stream在​​创build后通常不会更改其编码。

因此,stream的编码决定了您是否传递了utf8string或缓冲区或其他编码types的数据。 而且,如果你没有编码(例如二进制),那么当新数据可用时,你将传递一个Buffer对象而不是一个string。