Node.js 的流(Stream)是处理数据流的核心特性,广泛应用于文件读写、网络通信和实时数据处理场景。以下是流的基础知识与使用指南:

流的核心概念

  • 流是什么:流是一种异步处理数据的方式,允许分块读取或写入数据,避免一次性加载大文件或数据导致内存溢出
  • 流的优势:支持内存高效处理、可取消操作、可管道传输(pipe)数据
  • 典型场景
    • 实时视频/音频传输
    • 大文件复制(如 cp bigfile.txt /path
    • 数据压缩/加密处理

流的类型

Node.js 流分为四大类:

  1. Readable Stream 📡
    • 用于读取数据(如 fs.createReadStream
    • 示例:读取大文件时无需加载全部内容
    const fs = require('fs');
    const readable = fs.createReadStream('largefile.txt');
    
  2. Writable Stream 📝
    • 用于写入数据(如 fs.createWriteStream
    • 示例:将数据分块写入网络请求
    const writable = fs.createWriteStream('output.txt');
    
  3. Duplex Stream 🔁
    • 同时支持读写(如 net.createConnection
  4. Transform Stream 🔁📦
    • 可对数据进行转换(如 zlib.createGzip

实用技巧

  • 管道操作:通过 .pipe() 实现流式传输
    readable.pipe(writable);
    
  • 事件监听
    • data(数据分块)
    • end(数据传输完成)
    • error(异常处理)
  • 控制流速:使用 highWaterMark 设置缓冲区大小

扩展阅读

如需深入了解 Node.js 流的高级用法,可访问 Node.js 流指南 获取更多示例与最佳实践 🚀

NodeJS_Stream
Streams_Tutorial