Skip to content

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)