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
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事件