創(chuàng)建一個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 運行
- 不管你輸入什么,都會得到相同的結(jié)果
創(chuàng)建一個Writable Stream
const {Readable} = require("stream");
const inStream = new Readable();
inStream.push("ABCDEFGHIJKLM");
inStream.push("NOPQRSTUVWXYZ");
inStream.push(null); // No more data 沒有數(shù)據(jù)了
// 在數(shù)據(jù)寫好后讀數(shù)據(jù)
inStream.on('data', (chunk) => {
process.stdout.write(chunk)
console.log('寫數(shù)據(jù)了')
})
// 等同上面
// inStream.pipe(process.stdout);
- 保存文件為 writable.js 然后用node 運行
- 不管你輸入什么,都會得到相同的結(jié)果
改進
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
// 別人調(diào)用read讀數(shù)據(jù)才推數(shù)據(jù)
// process.stdout標(biāo)準(zhǔn)輸出事件
inStream.pipe(process.stdout)
- 保存文件為 readable2.js然后用 node 運行
- 這次的數(shù)據(jù)是按需供給的,對方調(diào)用read我們才會給一次數(shù)據(jù)
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輸入事件的數(shù)據(jù)調(diào)用upperCaseTr方法把小寫轉(zhuǎn)化為大寫,再通過process.stdout輸出
process.stdin.pipe(upperCaseTr).pipe(process.stdout);