如何读取nodejs的环境变量(详解Node中Stream模块之可写流Writable)
如何读取nodejs的环境变量(详解Node中Stream模块之可写流Writable)在使用可写流时,需要使用write方法将数据写入可写流内部,数据在经过一些列的处理后,会调用_write方法或者_writev方法进行消费。如果调用end方法就预示着写入操作的结束,后续再写入是不会有任何效果的。图2图1内部处理方式和可读流一样!直接上demo:
今天是中秋节,祝大家中秋节快乐!
之前两篇文章:
- 详解Node中Stream模块之可读流Readable(一)
- 详解Node中Stream模块之可读流Readable(二)
主要聊了一下可读流,这篇文章说说可写流!
Writable写法和可写流Readable一样,它也有两种初始化方式,如图1所示:
图1
内部处理方式和可读流一样!
Writable用法直接上demo:
图2
在使用可写流时,需要使用write方法将数据写入可写流内部,数据在经过一些列的处理后,会调用_write方法或者_writev方法进行消费。如果调用end方法就预示着写入操作的结束,后续再写入是不会有任何效果的。
_write方法(必须重新实现)
这个方法有三个参数:
- 第一个参数data是读入可写流内部经过处理后的数据
- 第二个参数enc是编码方式
- 第三个参数next是一个方法
next方法有两种调用方式:异步和同步!
图3 简单实现
数据第一次读入,会调用_write方法进行消费,如果此时内部的next方法是异步调用的,接下来读入的数据会存入内部的缓存区,等到写入结束,再从缓存区一一取出进行消费,如果调用next方法是同步的,就不会再存入缓存区,而是调用_write方法直接消费!
end方法
end方法是读入数据结束的标志,后面再读入是不会有任何效果的!
图4 end逻辑
校验
如果没有设置objectMode = true,写入的数据只能是字符串、buffer、Uint8Array,如果设置了对象模式,数据只要不为空就行!
write方法
写入数据
- 第一个参数data是读入的数据
- 第二个参数enc是编码方式,默认是utf8
- 第三个参数是一个自定义的回调函数
对于第三个回调函数,会在next方法中执行,如图5所示,唯一例外是如果实现了_writev方法,会在消费结束后把所有传入的回调函数放在onCorkedFinish方法中一次性循环执行完。
图5
_writev方法
此方法会把缓存区的数据一次性的返回,如图6所示,只有第一次的数据会经过_write方法消费。
图6
drain事件
如果写入的数据长度大于或等于highWaterMark,在未调用end方法的时候,当缓存区没有数据会触发此事件。
图7
如图7,把highWaterMark设置成了1,在数据处理结束时会触发drain事件
总结可读流相对于可写流要简单一些,不过到目前为止我们还没有把它们两者放在一起,后面我们会介绍一个很重要的方法pipe!另外在打断点时,打印的方法诸如console,stdout也会走进Stream源码中,影响我们的判断,所以建议把代码中的一些输入输出方法都干掉!
中秋快乐
喜欢我的文章就关注我吧,有问题可以发表评论,我们一起学习,共同成长!