Stream 对象的原型、事件

Stream对象的原型链

s=fs.createReadStream(path)

  • 那么它的对象层级为
  • 自身属性(由fs.ReadStream构造)
  • 原型:stream.Readable.prototype
  • 二级原型:stream.Stream.prototype
  • 三级原型:events.EventEmitter.prototype
  • 四级原型:Object.prototype
    Stream 对象都继承了EventEmitter

node --inspect-brk xxx.js

image.png
image.png

Readable Stream

静止态paused和流动态flowing

  • 默认处于paused态
  • 添加data事件监听,它就变为flowing态
  • 删掉data事件监听,它就变为paused态
  • pause()可以将它变为 paused
  • resume()可以将它变为flowing
const http = require('http')
const fs = require('fs')
const server = http.createServer()
server.on('request', (request, response) => {
  const stream = fs.createReadStream('./big_file.txt')
  stream.pipe(response)
  stream.pause()
  setTimeout(()=>{
    stream.resume()
  },3000)
})

server.listen(8888)

Writable Stream

drain 流干了事件

  • 表示可以加点水了
  • 我们调用stream.write(chunk)的时候,可能会得到false
  • false的意思是你写太快了,数据积压了
  • 这个时候我们就不能再write了,要监听drain等drain 事件触发了,我们才能继续write
  • 听不懂?看文档中的代码就懂了

finish 事件

  • 调用stream.end()之后,而且
  • 缓冲区数据都已经传给底层系统之后,
  • 触发finish事件

你可能感兴趣的:(Stream 对象的原型、事件)