Appearance
readStrem
可读流是基于 fs 模块,但内部继承自 Stream 流中的 Readable 接口。
js
const fs = require('fs')
const path = require('path')
// 文件可读流和流是两个概念,文件可读流是基于流实现的,文件流才有 open 和 close 事件。
// 可读流的标识就是拥有 ondata 和 onend
// 内部使用 fs.open fs.read fs.close
const readStream = fs.createReadStream(path.resolve(__dirname, 'foo.md'), {
flags: 'r',
encoding: null,
autoClose: true,
start: 0,
end: 100, // 从索引 0 的位置读取到索引 100 的位置
highWaterMark: 3 // 每次读取 3 个字节
// 权限 drwx r-x r-x d(rwxr) (r-x) (r-x),
// r - 4,w - 2,x - 1
// d 代表是不是文件夹,rwxr 代表自己的权限,可读可写可执行。
// r-x 代表只能读,不能执行
// r-x 代表其他人能读能执行,但是不能写。
// mode: 0o666,
})
// readStrem 是可读流对象
readStream.on('open', function (fd) {
console.log(fd)
})
// 监听 data 事件,内部会不停的将数据发送出来。
const ary = []
readStream.on('data', function (chunk) {
ary.push(chunk)
readStream.pause() // 暂停读取
// 消费
})
// 文件读取完毕后触发
readStream.on('end', function () {
console.log(Buffer.concat(ary).toString())
})
// close 事件需要等待读取完毕后才触发
readStream.on('close', function () {
console.log('close')
})
setInterval(() => {
readStream.resume() // 恢复读取
}, 1000)