Appearance
双工能
能读也能写,同时继承了可读流和可写流。
js
const path = require('path')
const { Duplex } = require('stream')
class MyDuplex extends Duplex {
_read (buffer) {
console.log(buffer)
}
_write (chunk, encoding, cb) {
console.log(chunk)
cb()
}
}
const myDuplex = new MyDuplex()
myDuplex.on('data', chunk => {
console.log(chunk)
})
// myDuplex.write('ok')
myDuplex.read(path.resolve(__dirname, 'foo.md'), 'utf-8')转化流
可以用于加密、压缩,可以把可写流转化为可读流。
js
const { Transform } = require('stream')
class MyTransfrom extends Transform {
_transform (chunk, encoding, cb) {
this.push(chunk.toString().toUpperCase())
cb()
}
}
const myTransfrom = new MyTransfrom()
// 有 data 就是可读流,监控用户的输入
process.stdin.on('data', chunk => {
process.stdout.write(chunk) // 等价于 console.log
})
// 等价于
process.stdin.pipe(process.stdout)
// 将输入转为大写并输出
process.stdin.pipe(myTransfrom).pipe(process.stdout)