Stream
流 (Stream)
___流:
- 是连续字节的一种表现形式和抽象概念
- 流应该是可读的,也是可写的
我们之前可以通过readFile或者write File的方式读写文件 为什么还需要流?
- 因为直接读写文件的方式,虽然简单,但是无法控制一些细节的操作
- 比如从什么位置开始读、读到什么位置、一次性读取多少个字节
- 读到某个位置后,暂停读取,某个时刻恢复读取等等;
- 或者这个文件非常大,比如一个视频文件,一次性全部读取并不合适;
文件读写的Stream
事实上Node中很多对象是基于流实现的:
http模块的Request和Response对象;
process.stdout对象;
所有的流都是EventEmitter的实例
Node.js中有四种基本流类型:
- Writable:可以向其写入数据的流(例如 fs.createWriteStream())。
- Readable:可以从中读取数据的流(例如 fs.createReadStream())。
- Duplex:同时为Readable和的流Writable(例如 net.Socket)。
- Transform:Duplex可以在写入和读取数据时修改或转换数据的流(例如zlib.createDeflate())。
Readable
传统读取文件信息:
1 | fs.readFile('./foo.txt',(err,data)=>{ |
流的方式读取
1 | const reader = fs.createReadStream("./foo.txt",{ |
通过监听data事件 获取读到的数据:
1 | reader.on('data',(data)=>{ |
文件打开关闭:
1 | reader.on('open',()=>{ |
Writeable
1 | //传统写入方式 |
pipe方法
1 | //传统写法 |