创建一个Writable Stream
const {Writable} = require("stream")
const outStream = new Writable({
write(chunk, encoding, callback) {
console.log(chunk.toString())
callback()
}
})
// process.stdin用户输入的的stream
process.stdin.pipe(outStream)
// 上面等价于下面
// process.stdin.on('data', (chunk)=> {
// outStream.write(chunk)
// })
- 保存文件为 writable.js 然后用node 运行
- 不管你输入什么,都会得到相同的结果
创建一个Writable Stream
const {Readable} = require("stream");
const inStream = new Readable();
inStream.push("ABCDEFGHIJKLM");
inStream.push("NOPQRSTUVWXYZ");
inStream.push(null); // No more data 没有数据了
// 在数据写好后读数据
inStream.on('data', (chunk) => {
process.stdout.write(chunk)
console.log('写数据了')
})
// 等同上面
// inStream.pipe(process.stdout);
- 保存文件为 writable.js 然后用node 运行
- 不管你输入什么,都会得到相同的结果
改进
const {Readable} = require("stream");
const inStream = new Readable({
read(size) {
const char = String.fromCharCode(this.currentCharCode++)
this.push(char);
console.log(`推了 ${char}`)
if (this.currentCharCode > 90) { // Z
this.push(null);
}
}
})
inStream.currentCharCode = 65 // A
// 别人调用read读数据才推数据
// process.stdout标准输出事件
inStream.pipe(process.stdout)
- 保存文件为 readable2.js然后用 node 运行
- 这次的数据是按需供给的,对方调用read我们才会给一次数据
Duplex Stream
const {Duplex} = require("stream");
const inoutStream = new Duplex({
write(chunk, encoding, callback) {
console.log(chunk.toString());
callback();
},
read(size) {
this.push(String.fromCharCode(this.currentCharCode++));
if (this.currentCharCode > 90) {
this.push(null);
}
}
})
inoutStream.currentCharCode = 65;
process.stdin.pipe(inoutStream).pipe(process.stdout);
Transform Stream
const { Transform } = require("stream");
const upperCaseTr = new Transform({
transform(chunk, encoding, callback) {
this.push(chunk.toString().toUpperCase());
callback();
}
});
// process.stdin输入事件的数据调用upperCaseTr方法把小写转化为大写,再通过process.stdout输出
process.stdin.pipe(upperCaseTr).pipe(process.stdout);