Node.js Stream(流)

Node.js 中的 Stream 模块是一种用于处理数据流的抽象接口。Stream 模块可以用于创建可读、可写或可读写的流。

Stream 模块在 Node.js 核心库中,所以在任何 Node.js 程序中都可以使用它。要使用 Stream 模块,首先需要加载 stream 模块,然后可以使用 ReadableWritableDuplex 类创建流。

例如,下面的代码创建了一个可读流,该流从字符串 "Hello, world!" 读取数据:

const { Readable } = require('stream');

const readable = new Readable();
readable._read = () => {};
readable.push('Hello, world!');
readable.push(null);

下面的代码创建了一个可写流,该流将数据写入到 stdout:

const { Writable } = require('stream');

const writable = new Writable({
  write(chunk, encoding, callback) {
    console.log(chunk.toString());
    callback();
  }
});

writable.write('Hello, world!');
writable.end();

下面的代码创建了一个可读写流,该流将输入的数据反转后输出:

const { Duplex } = require('stream');

const duplex = new Duplex({
  read() {},
  write(chunk, encoding, callback) {
    this.push(chunk.toString().split('').reverse().join(''));
    callback();
  }
});

duplex.push('Hello, world!');
duplex.push(null);

duplex.on('data', chunk => console.log(chunk.toString()));

Stream 模块还提供了许多有用的方法,例如 pipe 方法可以将一个流连接到另一个流上,on 方法可以监听流上的事件,writable.writable 属性可以判断流是否可写,readable.readable 属性可以判断流是否可读。

Stream 模块还提供了许多内置的流对象,例如 process.stdinprocess.stdout 可以用于处理标准输入和标准输出,fs.createReadStreamfs.createWriteStream 可以用于从文件中读取和写入数据。

下面是一个使用 Stream 模块的完整示例,该示例从文件中读取数据,将数据反转后写入到另一个文件中:

const { createReadStream, createWriteStream } = require('fs');
const { Transform } = require('stream');

const transform = new Transform({
  transform(chunk, encoding, callback) {
    this.push(chunk.toString().split('').reverse().join(''));
    callback();
  }
});

const input = createReadStream('input.txt');
const output = createWriteStream('output.txt');

input.pipe(transform).pipe(output);

总之,Stream 模块是 Node.js 中处理数据流的强大工具。它提供了可读、可写和可读写的流,以及许多有用的方法和内置流对象。通过正确使用 Stream 模块,可以使 Node.js 程序更加高效、可维护。

需要注意的是,在使用 Stream 模块时,需要遵循一些基本原则。例如,当使用可写流时,需要在调用 write 方法后立即调用 callback 函数,以表示写入已完成。

另外,在使用可读流时,需要在调用 push 方法后立即调用 callback 函数,以表示读取已完成。如果在调用 push 方法后不调用 callback 函数,可能会导致流进入饱和状态,并出现内存泄漏的问题。

在使用可读写流时,需要注意的是,可读写流同时具有可读和可写流的特征。因此,在使用可读写流时,需要同时遵循可读流和可写流的原则。

总之,使用 Stream 模块时需要遵循一些基本原则,以保证流的正常使用。通过遵循这些原则,可以使 Node.js 程序更加高效、可维护。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大哥的打嗝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值