关于使用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。