Node.js 词条目录
前端Wiki/词条/Stream 流

Stream 流

定义Node 处理流式数据的抽象:把大数据切成小块边读边处理,内存只占一小片

读一个 10 GB 的日志文件,直接 readFile 会把 10 GB 全塞进内存;Stream 则像水管:readable 流一块一块产出数据、writable 流一块一块写入,任何时刻内存里只有当前那一块。四种类型:Readable(可读)、Writable(可写)、Duplex(可读写)、Transform(读入变换后写出)。

Stream 的经典应用是 .pipe() 管道:源流 pipe 到目标流自动搬运。HTTP 请求/响应本身就是流——向响应里 stream 一个大文件,用户的首字节时间(TTFB)大幅提前。常见坑:背压(backpressure)——写入慢于读取时数据堆积,pipe 会自动暂停读取,手动写流要监听 drain 事件。

JavaScript
const fs = require('fs');
const http = require('http');
const { Transform } = require('stream');

// 流式读取大文件,内存占用恒定
fs.createReadStream('big.log')
  .pipe(new Transform({       // 边读边转换
    transform(chunk, enc, cb) {
      // 只保留含 ERROR 的行
      const lines = chunk.toString().split('\n');
      cb(null, lines.filter(l => l.includes('ERROR')).join('\n') + '\n');
    },
  }))
  .pipe(fs.createWriteStream('errors.log'));   // 写入目标文件

// 流式 HTTP 响应:用户立刻收到首字节
http.createServer((req, res) => {
  fs.createReadStream('movie.mp4')
    .pipe(res);               // 边读边响应
}).listen(3000);
⚠ 常见误区
🔗 相关词条Buffer 二进制数据Node.js 是什么读写文件
← 返回来源章节请求与响应处理