在 Node.js 中,Stream 是一种处理流式数据的抽象接口。Stream 可以是可读的、可写的,或者同时可读可写的。
可读流(Readable Stream)
可读流用于从数据源读取数据。例如,读取文件、网络请求等。
创建可读流
// www.javascriptcn.com code example
const fs = require('fs');
const readableStream = fs.createReadStream('file.txt');
readableStream.on('data', (chunk) => {
console.log(chunk.toString());
});
readableStream.on('end', () => {
console.log('End of file');
});可读流事件
data:当有数据可读时触发。end:当没有更多的数据可读时触发。error:当发生错误时触发。
可写流(Writable Stream)
可写流用于向目标写入数据。例如,写入文件、网络响应等。
创建可写流
const fs = require('fs');
const writableStream = fs.createWriteStream('output.txt');
writableStream.write('Hello, World!\n');
writableStream.end();可写流事件
drain:当流中所有数据都已经被传递给底层系统时触发。finish:当所有数据已经被写入底层系统时触发。error:当发生错误时触发。
双工流(Duplex Stream)
双工流既可以读取数据,也可以写入数据。
创建双工流
// www.javascriptcn.com code example
const { Duplex } = require('stream');
const duplexStream = new Duplex({
write(chunk, encoding, callback) {
console.log(chunk.toString());
callback();
},
read(size) {
this.push('Hello, World!\n');
this.push(null);
}
});
duplexStream.pipe(process.stdout);双工流事件
双工流同时继承了可读流和可写流的事件。
转换流(Transform Stream)
转换流是一种特殊的双工流,用于对数据进行转换。
创建转换流
// www.javascriptcn.com code example
const { Transform } = require('stream');
const transformStream = new Transform({
transform(chunk, encoding, callback) {
this.push(chunk.toString().toUpperCase());
callback();
}
});
process.stdin.pipe(transformStream).pipe(process.stdout);转换流事件
转换流同时继承了可读流和可写流的事件。
以上是关于 Node.js Stream 的简要介绍,希望能帮助你更好地理解和应用 Stream。