可读流是生产数据用来供程序消费的流。举例:
jsconst rs = fs.createReadStream(filePath);
process.stdin.pipe(process.stdout);
写一个每100毫秒产生随机数的流
jsconst Readable = require('stream').Readable;
class RandomNumberStream extends Readable {
constructor(max) {
super()
}
_read() {
const ctx = this;
setTimeout(() => {
const randomNumber = parseInt(Math.random() * 10000);
// 只能 push 字符串或 Buffer,为了方便显示打一个回车
ctx.push(`${randomNumber}\n`);
}, 100);
}
如果需要停下来的话,用ctx.push(null)
就行了。
可写流是对数据流向设备的抽象,用来消费上游流过来的数据,通过可写流程序可以把数据写入设备,常见的是本地磁盘文件或者 TCP、HTTP 等网络响应。
jsconst fs = require('fs');
const rs = fs.createReadStream('./w.js');
const ws = fs.createWriteStream('./copy.js');
rs.setEncoding('utf-8');
rs.on('data', chunk => {
ws.write(chunk);
});
write() 方法有三个参数
和自定义可读流类似,简单的自定义可写流只需要两步
jsconst Writable = require('stream').Writable
class OutputStream extends Writable {
_write(chunk, enc, done) {
// 转大写之后写入标准输出设备
process.stdout.write(chunk.toString().toUpperCase());
// 此处不严谨,应该是监听写完之后才调用 done
process.nextTick(done);
}
}
module.exports = OutputStream;
基本抄自:可读流
本文作者:mereith
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!