自定义文件可读流

const fs = require('fs')
const { EventEmitter } = require('events')

class MyFileReadStream extends EventEmitter {
    constructor (path, options = {}) {
        super()
        this.path = path
        this.flags = options.flags || 'r'
        this.mode = options.mode || 438
        this.autoClose = options.autoClose || true
        this.start = options.start || 0
        this.end = options.end
        this.hightWaterMark = options.hightWaterMark || 64*1024

        this.openMethod()
    }

    openMethod () {
        console.log('openMethod')
        // 源生open方法来打开指定位置上的文件
        fs.open(this.path,this.flags,this.mode,(err, fd)=>{
            if (err) {
                this.emit('error', err)
            }

            this.fd = fd
            console.log(fd)
            
            this.emit('myOpen', fd) // 发布事件

        })
    }

}

const rs = new MyFileReadStream('test.txt')
rs.on('myOpen', function(fd){ // 注册订阅事件
    console.log('myOpen', 'fd')
})

rs.on('error', (err=>{
    console.log(err)
}))

 

posted @ 2021-10-12 16:58  巡匿精灵  阅读(17)  评论(0)    收藏  举报