nodejs 流对象操作 记录
自定义可写流
const {Writable} = require('stream')
class CounterStream extends Writable {
constructor(options){
super(options)
this.counter = 0
}
_write(chunk , encoding, callback){
console.log(chunk.toString("utf-8"))
this.counter+=chunk.length
callback.call()
}
}
module.exports = CounterStream
关键在于继承stream.Writeable 并且重写 _write(chunk , encoding, callback)
自定义可读流
const {Readable} = require('stream')
class MyReadableStream extends Readable {
constructor(options){
super(options)
this.isFinished = false
}
_read(size){
//待处理数据放在this._buffer中
if(!this.isFinished){
this.push("abc123")
this.isFinished = true
}else{
this.push(null)
}
}
}
module.exports = MyReadableStream
关键在于继承stream.Readable 并且重写 _read(size)
_read 方法中要把数据放到this.push的方法中 且 没有数据读取时 this.push(null) 结束读取
可以从Readable.pipe(Writable) 使用管道的方式 从可读流读取数据 pipe 到可写流中
注意 该方法为异步方法
特殊的流 socket 为双向流 可读可写
process.stdin 标准输入流
process.stdout 标准输出流
process.stderr 标准异常流
把标准输入流输出到标准输出流
const stdin = require('process').stdin
const stdout = require('process').stdout
const stderr = require('process').stderr
stdin.pipe(stdout)
执行后 主线程阻塞 读取标准输入流 读取到数据后 在 标准输出流输出
输入流事件有以下几个
输出流事件