今天是中秋节,祝人人中秋节康乐!
之前两篇文章:
详解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源码中,影响我们的判断,所以建议把代码中的一些输入输出方式都干掉!
中秋康乐
喜欢我的文章就存眷我吧,有问题能够揭橥谈论,我们一路进修,配合成长!