Nodejs中的流
Nodejs中的很多地方都用到了流,流是一个很常见的概念,一个http请求,控制台输入输出的形式都是流。流可以分为三种:
- 可读流
- 可写流
- 既能读又能写
其中第三种流又可以分为全双工流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方法调用返回false
- finish: 所有的数据都写入完毕
- pipe: 当一个读取流调用pipe方法指向当前写入流
- unpipe: 当一个读取流调用unpipe方法将当前写入流撤销时
- error: 写入出现错误时
方法:
- write(chunk,[encoding],[callback]): 写入数据,当数据必须要在内部被缓冲时,返回false
- end([chunk],[encoding],[callback]): 写完之后就终止新的写入了
可读写流
Duplex: 全双工的流,可读可写
Transform: 从input中读取流数据,进行处理后写入到output流中
Nodejs中的流的更多相关文章
- 理解nodejs中的stream(流)
阅读目录 一:nodeJS中的stream(流)的概念及作用? 二:fs.createReadStream() 可读流 三:fs.createWriteStream() 可写流 回到顶部 一:node ...
- nodejs中Stream的理解
在nodejs中可以通过fs模块读写文件,我们来看下fs模块提供的接口: fs.readFile(filename, callback) 异步读取文件. filename是读取文件的文件名,如果是相对 ...
- nodeJS中读写文件方法的区别
导言:nodejs中所有与文件相关的操作都在fs模块中,而读写操作又是我们会经常用到的操作,nodejs的fs模块针对读操作为我们提供了readFile,read, createReadStream三 ...
- nodejs中mysql用法
nodejs也算是一篇脚本了我们来看nodejs如何使用mysql数据库了有了它们两组合感觉还是非常的不错哦,下面一起来看nodejs中使用mysql数据库的示例,希望能够帮助到各位. <scr ...
- nodejs中如何使用mysql数据库[node-mysql翻译]
nodejs中如何使用mysql数据库 db-mysql因为node-waf: not found已经不能使用,可以使用mysql代替. 本文主要是[node-mysql]: https://www. ...
- nodejs基础 -- Stream流
nodejs 的 Stream 是一个抽象接口,node中有很多对象实现了这个接口.例如,对http服务器发起请求的request对象就是一个Stream,还有stdout(标准输出)也是一个Stre ...
- nodeJS中的事件机制
events模块是node的核心模块,几乎所有常用的node模块都继承了events模块,比如http.fs等.本文将详细介绍nodeJS中的事件机制 EventEmitter 多数 Node.js ...
- nodejs中的文件系统
. 目录 简介 nodejs中的文件系统模块 Promise版本的fs 文件描述符 fs.stat文件状态信息 fs的文件读写 fs的文件夹操作 path操作 简介 nodejs使用了异步IO来提升服 ...
- 在nodejs中创建child process
目录 简介 child process 异步创建进程 同步创建进程 在nodejs中创建child process 简介 nodejs的main event loop是单线程的,nodejs本身也维护 ...
随机推荐
- im2rec 修改resize
https://github.com/apache/incubator-mxnet/blob/master/tools/im2rec.py#L196 源码是按照比例修改resize. 现在需要改一个自 ...
- php------中文出现乱码解决方法
中文出现乱码解决方法:原因编码格式不一致 [1] 建立数据库的时候,字符集选择utf-8 数据库,点表名,点右键,数据库属性…. [2] 修改myspl的配置,在[myspld]模块下面添加ch ...
- 通过nginx 499 来判断服务端超时数量
这个其实不能算一篇文章,因为内容太少了,就当记点笔记吧. (1)什么是 nginx 499 499 其实是 nginx 下特有的 http 状态码,代表客户端主动断开了连接,导致服务器无法返回 htt ...
- ASP.NET SingalR + MongoDB 实现简单聊天室(一):搭建基本框架
ASP.NET SingalR不多介绍.让我介绍不如看官网,我这里就是直接上源代码,当然代码还是写的比较简单的,考虑的也少,希望各位技友多多提意见. 先简单介绍聊天室功能: 用户加入聊天室,自动给用户 ...
- JQuery 学习总结及实例 !! (转载)
出自 new:http://www.jianshu.com/users/1967b163cb61/latest_articles 1.JQuery简介 普通JavaScript的缺点:每种控件的操作方 ...
- 提交文件到ng-pages分支
一.提交dist文件夹到ng-pages分支 git subtree push --prefix=dist origin gh-pages 二.提交所有文件到ng-pages分支 text git:( ...
- 使用jQuery实现伪分页
在之前的项目中遇到一个这样的问题,页面分为上下两部分(分别称为未选中设备信息部分和选中设备信息部分),上面是从数据库拿出来的所有的设备信息,下面是显式已选中的设备信息,页面如下所示: 可以选中其中的任 ...
- [LuoguP3195] [HNOI2008]玩具装箱TOY
[HNOI2008]玩具装箱(Link) 题目描述 \(P\)教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊 ...
- 嵌入式 Linux 学习 之路
1. 嵌入式 Linux (首先百度了一下) 结果没有 看到 有信息的内容.2017年2月17日10:06:51 (嵌入式Linux 英文名:embedded Linux 简称 eLinux,Git ...
- 用javascript编写简单银行取钱存钱流程(函数)
const readline = require('readline-sync')//引用readline-sync let arr = [[], []]; //登陆 let add = functi ...