创建一个 Writable Stream
const { Writable } = require("stream");
const outStream = new Writable({
write(chunk, encoding, callback) { //如果别人写入,我就……
console.log(chunk.toString()); //我就打印出来
callback(); //就只是callback一下,调用了,才会进行下一次,不调就一直卡在这
}
});
process.stdin.pipe(outStream); //process.stdin:获取命令行中用户当前输入的值
创建一个Readable Stream
const { Readable } = require("stream");
const inStream = new Readable();
inStream.push('123123123') //写入123123123 第一次写入
inStream.push('一二三亖一二三亖一二三亖') //写入一二三亖一二三亖 第二次写入
inStream.pipe(process.stdout); //process.stdout:输出到命令行中
以上代码是,在跑的时候打印出来,那可不可以在用户调用的时候,才去读,如下:
const { Readable } = require("stream");
const inStream = new Readable({
read(size) {
const char = String.fromCharCode(this.currentCharCode++); //字母 A 到 Z
this.push(char) //推到了流
if(this.currentCharCode > 90){ //当键Code大于90就推一个空过去
this.push(null)
}
}
});
inStream.currentCharCode = 65;
inStream.pipe(process.stdout); //开始调用 read
创建一个Duplex Stream
和上面的代码差不多
const { Duplex } = require("stream");
const inoutStream = new Duplex({
write(chunk, encoding, callback) {
console.log(chunk.toString());
callback();
},
read(size){
const char = String.fromCharCode(this.currentCharCode++); //字母 A 到 Z
this.push(char) //推到了流
if(this.currentCharCode > 90){ //当键Code大于90就推一个空过去
this.push(null)
}
},
})
inStream.currentCharCode = 65;
process.stdin.pipe(inoutStream).pipe(process.stdout);
创建一个Transform Stream
const { Transform } = require("stream");
const upperCaseTr = new Transform({
transform(chunk, encoding, callback) {
const str = chunk.toString().toUpperCase();
this.push(str);
callback();
}
});
//用户输入一个小写字符,该小写流就会进入Transform ,里面转化成大写,再把大写读出来
process.stdin.pipe(upperCaseTr).pipe(process.stdout);