Skip to content

双工能

能读也能写,同时继承了可读流和可写流。

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)