首页 > 科技 >

详解Node中Stream模块之可写流Writable

2019-09-16 06:25:19 暂无 阅读:1125 评论:0

今天是中秋节,祝人人中秋节康乐!

之前两篇文章:

详解Node中Stream模块之可读流Readable(一)

详解Node中Stream模块之可读流Readable(二)

首要聊了一下可读流,这篇文章说说可写流!Writable写法

和可写流Readable一般,它也有两种初始化体式,如图1所示:

详解Node中Stream模块之可写流Writable

图1

内部处理体式和可读流一般!Writable用法

直接上demo:

详解Node中Stream模块之可写流Writable

图2

在使用可写流时,需要使用write方式将数据写入可写流内部,数据在经由一些列的处理后,会挪用_write方式或许_writev方式进行消费。若是挪用end方式就预示着写入把持的竣事,后续再写入是不会有任何结果的。

_write方式(必需从新实现)

这个方式有三个参数:

第一个参数data是读入可写流内部经由处理后的数据

第二个参数enc是编码体式

第三个参数next是一个方式

next方式有两种挪用体式:异步和同步!

详解Node中Stream模块之可写流Writable

图3 简洁实现

数据第一次读入,会挪用_write方式进行消费,若是此时内部的next方式是异步骤用的,接下来读入的数据会存入内部的缓存区,比及写入竣事,再从缓存区一一掏出进行消费,若是挪用next方式是同步的,就不会再存入缓存区,而是挪用_write方式直接消费!

end方式

end方式是读入数据竣事的标记,后背再读入是不会有任何结果的!

详解Node中Stream模块之可写流Writable

图4 end逻辑

校验

若是没有设置objectMode = true,写入的数据只能是字符串、buffer、Uint8Array,若是设置了对象模式,数据只要不为空就行!

write方式

写入数据

第一个参数data是读入的数据

第二个参数enc是编码体式,默认是utf8

第三个参数是一个自界说的回调函数

对于第三个回调函数,会在next方式中执行,如图5所示,独一破例是若是实现了_writev方式,会在消费竣事后把所有传入的回调函数放在onCorkedFinish方式中一次性轮回执行完。

详解Node中Stream模块之可写流Writable

图5

_writev方式

此方式会把缓存区的数据一次性的返回,如图6所示,只有第一次的数据会经由_write方式消费。

详解Node中Stream模块之可写流Writable

图6

drain事件

若是写入的数据长度大于或等于highWaterMark,在未挪用end方式的时候,当缓存区没稀有据会触发此事件。

详解Node中Stream模块之可写流Writable

图7

如图7,把highWaterMark设置成了1,在数据处理竣事时会触发drain事件总结

可读流相对于可写流要简洁一些,不外到今朝为止我们还没有把它们两者放在一路,后背我们会介绍一个很主要的方式pipe!此外在打断点时,打印的方式诸如console,stdout也会走进Stream源码中,影响我们的判断,所以建议把代码中的一些输入输出方式都干掉!

详解Node中Stream模块之可写流Writable

中秋康乐

喜欢我的文章就存眷我吧,有问题能够揭橥谈论,我们一路进修,配合成长!

相关文章