Skip to content

Node.js 的 Buffer、Stream 与数据传输

很多前端同学第一次看到 BufferStream,会觉得它们很偏底层。

但 Node.js 里很多文件处理、网络传输、压缩解压、构建产物流转,其实都和它们有直接关系。

1. Buffer 在解决什么问题

Buffer 可以看成 Node.js 用来处理二进制数据的一种基础数据结构

为什么需要它?

因为并不是所有数据都天然适合当成字符串来处理。

例如:

  1. 图片
  2. 音视频
  3. 压缩包
  4. 网络传输中的原始字节数据

2. Stream 在解决什么问题

Stream 可以看成 把一大块数据拆成连续的小段来处理的机制

它真正解决的是:

  1. 不必一次性把所有数据全部读进内存
  2. 可以边读边处理
  3. 可以边读边传输

所以它尤其适合:

  1. 大文件读写
  2. 网络响应
  3. 管道式处理

3. 为什么流适合处理大文件

如果一个文件很大,一次性读入内存会带来:

  1. 更高内存占用
  2. 更差的稳定性
  3. 更不适合持续传输

而流的思路更像是:

mermaid
flowchart TD
    A[数据源] --> B[按块读取]
    B --> C[边读边处理]
    C --> D[边写出或边发送]

4. Node.js 里常见的流类型

通常会提到四类:

  1. 可读流
  2. 可写流
  3. 双工流
  4. 转换流

前端工程里最先需要理解的,通常是:

  1. 文件可读流
  2. 文件可写流
  3. 请求和响应过程里的流式传输

5. 一份检查清单

理解 BufferStream 时,至少可以自查:

  1. 当前数据是文本,还是原始二进制
  2. 这份数据是否大到不适合一次性读入内存
  3. 当前场景更适合整体处理,还是分块处理

6. 小结

如果压缩成一句话,可以记住:

Buffer 解决的是“如何表示二进制数据”,Stream 解决的是“如何更高效地传输和处理连续数据”。

基于 VitePress 构建的个人技术笔记。