Node.js fs模块(五)

之前介绍了fs模块的文件可读流,本节继续介绍fs模块的文件可写流。

fs.WriteStream继承了stream.Writable,并重写了_write方法,实现了文件可写流

我们一般通过fs.createWriteStream来创建一个文件可写流对象。

目录

创建文件可写流对象

使用文件可写流对象

文件可写流的常用事件

open事件

error事件

finish事件

close事件

drain事件


创建文件可写流对象

const fs = require('fs')
const path = require('path')

const ws = fs.createWriteStream(path.join(__dirname, 'test.txt'), {
  fd: null,
  flags: 'r+',
  mode: 438,
  encoding: 'utf-8',
  start: 0,
  autoClose: true,
  highWaterMark: 2
})

fs.createWriteStream方法有两个参数,path和options

path就是要被写入数据的文件的路径

options就是可写流对象的一些参数

参数作用:

1、打开文件(打开文件,需要指定path或options.fd,options.flags,options.mode,options.encoding)

2、写入数据(写入数据的位置信息,从文件哪里开始start写入)

3、关闭文件(当写入完毕后,是否需要自动关闭文件autoClose)

还有可写流对象缓冲区的水位线highWaterMark

使用文件可写流对象

文件可写流的作用主要就是向文件中写入数据,写入数据的方式就是使用可写流的内置方法write和end。

其中write用于写入数据,end也可用于写入数据,但是其根本作用是通知可写流对象写入结束。

Node.js fs模块(五)

文件可写流的常用事件

open事件

创建可写流对象的同时就会打开文件,而打开文件就会触发可写流对象的open事件

Node.js fs模块(五)

监听open事件的主要作用就是获取文件描述符fd 

error事件

当可写流对象创建或使用过程中发生任何异常时,都会触发error事件,我们一般监听error事件来处理异常情况

Node.js fs模块(五)

finish事件

当ws.end方法执行后,表示可写流对象停止写入了,此时表示写入结束,会触发finish事件

Node.js fs模块(五)

close事件

当可写流对象写入结束(即end方法执行),且autoClose为true时(即表示自动关闭文件时),就会触发close事件

Node.js fs模块(五)

end执行和autoClose为true,二者缺一都不会触发close事件

Node.js fs模块(五)

Node.js fs模块(五)

需要注意的是,我们无论是文件可写流的open事件,还是close事件,其实目标都不是文件本身,而是更多关注的是可写流对象。

即如果我们自己使用fs.close(fd)来关闭文件,无法触发文件可写流的close事件

Node.js fs模块(五)

drain事件

drain事件是可写流独有的事件,它的触发时机是,当可写流对象缓冲区数据量超过了highWaterMark水位线(state.needDrain被置为true),之后缓冲区数据被消费清空后,就会触发drain事件。

drain事件通常不会单独使用,通常是在生产者生产速度 快于 消费者消费速度时,作为报警器来提示生产者停止生产用的。

而drain事件正是协同生产速度和消费速度的背压机制的核心。

下面一节,我们来介绍背压机制。

上一篇:app_offline.htm的作用


下一篇:页面渲染的两种方式