以下是一些关于 Node.js 流的基本概念和用法:
1. 可读流(Readable Stream):
可读流用于从数据源读取数据。
const fs = require('fs');
// 创建可读流
const readableStream = fs.createReadStream('example.txt', 'utf-8');
// 监听 'data' 事件,处理流中的数据
readableStream.on('data', (chunk) => {
console.log('Received chunk:', chunk);
});
// 监听 'end' 事件,表示数据读取完毕
readableStream.on('end', () => {
console.log('Finished reading data');
});
// 监听 'error' 事件,处理可能的错误
readableStream.on('error', (error) => {
console.error('Error:', error);
});
2. 可写流(Writable Stream):
可写流用于向目标写入数据。
const fs = require('fs');
// 创建可写流
const writableStream = fs.createWriteStream('output.txt', 'utf-8');
// 写入数据
writableStream.write('Hello, World!\n');
writableStream.write('Another line of text.');
// 结束写入
writableStream.end();
// 监听 'finish' 事件,表示数据写入完毕
writableStream.on('finish', () => {
console.log('Finished writing data');
});
// 监听 'error' 事件,处理可能的错误
writableStream.on('error', (error) => {
console.error('Error:', error);
});
3. 双工流(Duplex Stream):
双工流同时实现了可读和可写功能。
const { Duplex } = require('stream');
// 创建双工流
const duplexStream = new Duplex({
write(chunk, encoding, callback) {
console.log('Received data:', chunk.toString());
callback();
},
read(size) {
// 实现读取逻辑
}
});
// 写入数据
duplexStream.write('Hello, World!');
// 结束写入
duplexStream.end();
// 监听 'finish' 事件,表示数据写入完毕
duplexStream.on('finish', () => {
console.log('Finished writing data');
});
// 监听 'error' 事件,处理可能的错误
duplexStream.on('error', (error) => {
console.error('Error:', error);
});
4. 转换流(Transform Stream):
转换流是一种特殊的双工流,用于对输入数据进行转换。
const { Transform } = require('stream');
// 创建转换流
const transformStream = new Transform({
transform(chunk, encoding, callback) {
// 对数据进行转换
const transformedData = chunk.toString().toUpperCase();
this.push(transformedData);
callback();
}
});
// 将转换流连接到可读流和可写流
readableStream.pipe(transformStream).pipe(writableStream);
这些是 Node.js 流的一些基本用法。流的优势在于它们可以有效地处理大量数据,而无需将所有数据加载到内存中。在实际应用中,你可以根据需要选择不同类型的流,并结合事件监听和流的方法来实现复杂的数据处理逻辑。
转载请注明出处:http://www.zyzy.cn/article/detail/4773/Node.js