创建一个 Writable Stream

  1. const { Writable } = require("stream");
  2. const outStream = new Writable({
  3. write(chunk, encoding, callback) { //如果别人写入,我就……
  4. console.log(chunk.toString()); //我就打印出来
  5. callback(); //就只是callback一下,调用了,才会进行下一次,不调就一直卡在这
  6. }
  7. });
  8. process.stdin.pipe(outStream); //process.stdin:获取命令行中用户当前输入的值

创建一个Readable Stream

  1. const { Readable } = require("stream");
  2. const inStream = new Readable();
  3. inStream.push('123123123') //写入123123123 第一次写入
  4. inStream.push('一二三亖一二三亖一二三亖') //写入一二三亖一二三亖 第二次写入
  5. inStream.pipe(process.stdout); //process.stdout:输出到命令行中

以上代码是,在跑的时候打印出来,那可不可以在用户调用的时候,才去读,如下:

  1. const { Readable } = require("stream");
  2. const inStream = new Readable({
  3. read(size) {
  4. const char = String.fromCharCode(this.currentCharCode++); //字母 A 到 Z
  5. this.push(char) //推到了流
  6. if(this.currentCharCode > 90){ //当键Code大于90就推一个空过去
  7. this.push(null)
  8. }
  9. }
  10. });
  11. inStream.currentCharCode = 65;
  12. inStream.pipe(process.stdout); //开始调用 read

创建一个Duplex Stream

和上面的代码差不多

  1. const { Duplex } = require("stream");
  2. const inoutStream = new Duplex({
  3. write(chunk, encoding, callback) {
  4. console.log(chunk.toString());
  5. callback();
  6. },
  7. read(size){
  8. const char = String.fromCharCode(this.currentCharCode++); //字母 A 到 Z
  9. this.push(char) //推到了流
  10. if(this.currentCharCode > 90){ //当键Code大于90就推一个空过去
  11. this.push(null)
  12. }
  13. },
  14. })
  15. inStream.currentCharCode = 65;
  16. process.stdin.pipe(inoutStream).pipe(process.stdout);

创建一个Transform Stream

  1. const { Transform } = require("stream");
  2. const upperCaseTr = new Transform({
  3. transform(chunk, encoding, callback) {
  4. const str = chunk.toString().toUpperCase();
  5. this.push(str);
  6. callback();
  7. }
  8. });
  9. //用户输入一个小写字符,该小写流就会进入Transform ,里面转化成大写,再把大写读出来
  10. process.stdin.pipe(upperCaseTr).pipe(process.stdout);