🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
>[success] # stream 1. 关于`stream流`的解释,理解为水流,就像水一样会从一个地方流到另一个地方,程序中的数据也**会按照一定的规则从一个地方“流”到另一个地方**。在程序中,**流**可以用来**读写文件和网络数据**等,流的**优点是可以处理大量的数据,而不需要一次性将所有数据读入内存,这提高了程序的效率和资源利用率**。也就是说,流处理的数据就像水一样,可以流动,**可以分成一块一块来**,可以在不同设备之间流动,可以通过程序进行操作和处理,例如:**读取文件的二进制(字节)数据会源源不断的被读取到我们程序** 2. `Node.js`也支持流式传输,允许数据被分成小块进行处理,而不是一次性读取整个文件或数据流。流的特点流**是可读的,也是可写的** 3. `Node.js` 类型对照表 | 类型 | 描述 | 示例 | API | | --- | --- | --- | --- | | 可读流(Readable) | 用于读取数据的流式接口 | 从文件读取数据、处理 http 请求时获取请求 body 等 | fs.createReadStream(), http.IncomingMessage | | 可写流(Writable) | 用于写入数据的流式接口 | 将数据写入文件、处理 http 响应时写入响应 body 等 | fs.createWriteStream(), http.ServerResponse | | 双向流(Duplex) | 既可读又可写的流 | 像一个 TCP 套接字 | net.Socket, tls.TLSSocket | | 转换流(Transform) | 在读写过程中可以对数据进行修改的流 | zlib 的压缩和解压缩流等 | zlib.createGzip(), zlib.createGunzip() | >[danger] ##### 优缺点 * **使用Node.js中的Stream有以下几点优势**: 1. 内存占用少:Stream会分块传输数据,不会一次性将所有数据读取到内存中,减少了内存占用。 2. 效率高:Stream使用事件驱动,能够在数据处理过程中实现高效的数据传输和处理,提高了数据处理和传输的效率。 3. 可以进行数据转换:Stream提供了转换流的功能,可以在流程中对数据进行转换,如压缩、解压缩等操作。 4. 可靠性高:Stream可以处理大量的数据,而且在数据传输过程中,可以对错误进行处理,保证了数据传输的可靠性。 * **使用Node.js中的Stream的缺点如下**: 1. 复杂性高:因为Stream需要处理的是流数据,所以使用时需要具备一定的数据处理和操作技能,学习成本相对较高。 2. 容易出错:因为Stream处理数据的过程比较复杂,所以容易出现一些意料之外的错误。 3. 不适用于所有场景:Stream适用于流数据的处理和传输场景,如果是处理一些静态的文件数据,Stream的优势就不太明显了。