创建一个 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 到 Zthis.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 到 Zthis.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);
