>[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的优势就不太明显了。
- 基础
- 什么是Node.js
- 理解 I/O 模型
- 理解node 中 I/O
- 对比node 和java 使用场景
- node 模块管理
- 内置模块 -- buffer
- 内置模块 -- fs
- fs -- 文件描述符
- fs -- 打开文件 api
- fs -- 文件读取 api
- fs -- 文件写入 api
- fs -- 创建目录 api
- fs -- 读取文件目录结构 api
- fs -- 文件状态(信息) api
- fs -- 删除文件/目录 api
- fs -- 重命名 api
- fs -- 复制文件 api
- 内置模块 -- events
- 内置模块 -- stream
- 可读流 -- Readable
- 可写流 -- Writable
- Duplex
- Transform
- 内置模块 -- http
- http -- 从客户端发起
- http -- 从服务端发起
- 内置模块 -- url
- 网络开发