博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
了解nodeJs中的流(stream)
阅读量:6814 次
发布时间:2019-06-26

本文共 1338 字,大约阅读时间需要 4 分钟。

Nodejs中的很多地方都用到了流,流是一个很常见的概念,一个http请求,控制台输入输出的形式都是流。流可以分为三种:

可读流(Readable)可写流(Writable )既能读又能写(Duplex )其中第三种流又可以分为全双工流Duplex和转换流Transform,另外,所有的流都是EventEmitter的实例,也就是有发送事件和处理事件的能力。复制代码

可读流 Readable Stream

可读流可以输出数据,常见的可读流有:

http请求和响应读文件压缩解压加密解密tcp sockect进程输入复制代码

可读流分为两种模式:流式的和非流式的,区别就是前者会尽快保证数据可用,而后者则是只有等到你主动调用stream.read()之后才可用。

刚才说过,所有的流都是EventEmitter的实例,它本身也有一些内置的事件,ReadableStream有的事件包括:

readable: 流中的数据已经准备就绪data: 有数据到来,对应flowing模式end: 没有更多的数据了close: 有关的资源如文件描述符被关闭时触发error: 接收数据时发生错误复制代码

另外还有一些方法接口:

read([size]): 主动的拉取一定的数据,如果没有数据,则返回null,如果size不传,则返回所有可用的数据。该方法只能在non-flowing模式下调用setEncoding(encoding): 使用什么样的编码格式进行解析pause(): 停止发送data事件,新来的数据会保留到内部的buffer中resume(): 对应上个事件,恢复data事件的发送pipe(destination, [option]):从流中拉取数据,并写入到destination流中,因为返回的是destination流,因此可以使用链式操作;默认情况下,读取流关闭后写入流也被关闭unpipe([destination]): 将pipe方法设定的写入规则移除掉,如果不传入destination,则移除所有的流unshift(chunk): 可以想象为把吐出来的东西再吃进去,这里就是把读取出来的部分或全部内容再次放到可读流中wrap(stream): 对老式的流进行包装复制代码

可写流 Writable Stream

同样的,可写流有事件和方法两部分,事件包括:

drain: 表明数据还没有写完,write方法调用返回falsefinish: 所有的数据都写入完毕pipe: 当一个读取流调用pipe方法指向当前写入流unpipe: 当一个读取流调用unpipe方法将当前写入流撤销时error: 写入出现错误时复制代码

方法:

write(chunk,[encoding],[callback]): 写入数据,当数据必须要在内部被缓冲时,返回falseend([chunk],[encoding],[callback]): 写完之后就终止新的写入了复制代码

可读写流

Duplex: 全双工的流,可读可写Transform: 从input中读取流数据,进行处理后写入到output流中复制代码

(由于本次时间较紧,后续会写一些代码放上来进一步了解深入)

转载地址:http://oxzzl.baihongyu.com/

你可能感兴趣的文章
Mac前端抓包小工具Charles4.0下载
查看>>
用AHP层次分析法挑选最佳结婚对象
查看>>
Subversion安装手记
查看>>
Linux 获取设备树源文件(DTS)里描述的资源【转】
查看>>
Effective C++ 阅读笔记(二)public继承与继承中的函数覆盖
查看>>
什么是UV?
查看>>
Stringbuffer与Stringbuilder源码学习和对比
查看>>
Centos 学习大纲
查看>>
常见的JavaScript易错知识点整理
查看>>
RagingWire战略重点批发数据中心服务
查看>>
数据中心的规模是否影响虚拟化DCIM的决策?
查看>>
后流量时代,世间再无电信运营商
查看>>
李开复:钉钉是大胆的突破式创新
查看>>
夏普欲收回美洲品牌授权 海信总裁:严格按照合同办
查看>>
大数据市场迎来扩容期 本土内存数据库抢位崛起
查看>>
IPython4_Notebook
查看>>
rac问题思考总结
查看>>
Android 自定义View总结
查看>>
.NET平台开源项目速览(5)深入使用与扩展SharpConfig组件
查看>>
u-boot-1.3.4 移植到S3C2440
查看>>