Appearance
Node.js 的 Buffer、Stream 与数据传输
很多前端同学第一次看到 Buffer 和 Stream,会觉得它们很偏底层。
但 Node.js 里很多文件处理、网络传输、压缩解压、构建产物流转,其实都和它们有直接关系。
1. Buffer 在解决什么问题
Buffer 可以看成 Node.js 用来处理二进制数据的一种基础数据结构。
为什么需要它?
因为并不是所有数据都天然适合当成字符串来处理。
例如:
- 图片
- 音视频
- 压缩包
- 网络传输中的原始字节数据
2. Stream 在解决什么问题
Stream 可以看成 把一大块数据拆成连续的小段来处理的机制。
它真正解决的是:
- 不必一次性把所有数据全部读进内存
- 可以边读边处理
- 可以边读边传输
所以它尤其适合:
- 大文件读写
- 网络响应
- 管道式处理
3. 为什么流适合处理大文件
如果一个文件很大,一次性读入内存会带来:
- 更高内存占用
- 更差的稳定性
- 更不适合持续传输
而流的思路更像是:
mermaid
flowchart TD
A[数据源] --> B[按块读取]
B --> C[边读边处理]
C --> D[边写出或边发送]4. Node.js 里常见的流类型
通常会提到四类:
- 可读流
- 可写流
- 双工流
- 转换流
前端工程里最先需要理解的,通常是:
- 文件可读流
- 文件可写流
- 请求和响应过程里的流式传输
5. 一份检查清单
理解 Buffer 和 Stream 时,至少可以自查:
- 当前数据是文本,还是原始二进制
- 这份数据是否大到不适合一次性读入内存
- 当前场景更适合整体处理,还是分块处理
6. 小结
如果压缩成一句话,可以记住:
Buffer 解决的是“如何表示二进制数据”,Stream 解决的是“如何更高效地传输和处理连续数据”。