ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Node.js fs模块(五)

2022-01-23 16:05:30  阅读:143  来源: 互联网

标签:Node 文件 fs 对象 写入 js 事件 可写


之前介绍了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也可用于写入数据,但是其根本作用是通知可写流对象写入结束。

文件可写流的常用事件

open事件

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

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

error事件

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

finish事件

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

close事件

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

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

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

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

drain事件

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

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

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

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

标签:Node,文件,fs,对象,写入,js,事件,可写
来源: https://blog.csdn.net/qfc_128220/article/details/122651758

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有