Node stream
2022-04-21
流(Stream)是一种传输手段,其核心含义是指一个有始有终的数据传输结构,这通常是文件打开 -> 关闭的过程,在 Node.js 中分为四个基本的流类型,分别为:
Id | Name | Info |
---|---|---|
1 | Writable | 可写入流(fs.createWriteStream() ) |
2 | Readable | 读取流 (fs.createReadStream() ) |
4 | Duplex | 可读流 (net.Socket ) |
4 | Transorm | 在读写的过程中可以修改和变换数据的可读写流(Duplex,zlib.createDeflate() ) |
对于体积较大的二进制文件,如音频、视频文件或以 GB 为单位来衡量大小的,则会容易造成 爆仓 ,为避免爆仓的发生,读取体积大的文件应使用读一部分写一部分的方式进行。
Readable
对于 node 的可读取留,即通过 fs.createReadStream
方法创建一个读取流,其参数大多数可通过 Node.js File System
进行参考,在这其中 highWaterMark
参数主要的作用是内部读取缓存区大小,这将在某些情况下,需要触发底层可读留机制的刷新,从而不消耗任何数据。
1 | const fs = require('fs') |
之后根据其 Stream 流程 open -> data -> error -> end -> close ,其中在监听 data
事件中,就可读取文件的内容并输出数据,边度边输的模式,这将会不停的通过 data
读取数据、触发 data
后再次读取。
在这个过程中主要的不是将文件的整体内容读取并输出,而是通过 fs.createReadStream
方法所设置的缓存区,大小默认为 64KB(这可通过 highWaterMark
参数进行设置)
Writable
可写流(Writable Stream),主要通过使用 fs.createWriteStream()
方法进行创建,并通过 ws.write
进行写入,并当 end
事件后后使用 finish
事件来回调方法。
1 | const fs = require('fs') |
管道流
管道流提供了一个输出和输入流的机制,这最为常用到的场景就是获取一个流的数据并写入另一个流当中。
1 | const fs = require('fs') |
或者通过其 rs.pipe()
方法,将可读流写到可写流当中,并触发 pipe
事件:
1 | const fs = require('fs') |