📅  最后修改于: 2023-12-03 15:17:57.416000             🧑  作者: Mango
在Node.js中,流(stream)是一种处理流数据(streaming data)的抽象接口。流可以是只读的、只写的,也可以是可读可写的。它们提供了类似于UNIX shell管道(pipe)的基本功能,这意味着它们可以被链接起来来处理数据流。流很适合处理大型文件或网络数据,因为它们能够按需处理数据,而不是一次性将整个数据块加载到内存中。
在Node.js中有四种基本的流类型:
创建可读流:
const fs = require('fs');
const readableStream = fs.createReadStream('input.txt');
读取数据:
let data = '';
readableStream.on('data', (chunk) => {
data += chunk;
});
readableStream.on('end', () => {
console.log(data);
});
创建可写流:
const fs = require('fs');
const writableStream = fs.createWriteStream('output.txt');
写入数据:
writableStream.write('Hello world!', 'UTF8');
创建双向流:
const net = require('net');
const duplexStream = new net.Socket();
创建转换流:
const { Transform } = require('stream');
const upperCaseTransform = new Transform({
transform(chunk, encoding, callback) {
callback(null, chunk.toString().toUpperCase());
}
})
使用转换流:
const { Readable } = require('stream');
const readableStream = new Readable({
read() {
this.push('hello\n');
this.push('world\n');
this.push(null);
}
});
readableStream
.pipe(upperCaseTransform)
.pipe(process.stdout);
流数据的处理包括流的读取处理和流的写入处理。
流的读取处理需要用到可读流的 read
方法或者使用 on('data', callback)
事件处理。
使用 read
方法:
readableStream.read();
使用 on
方法:
readableStream.on('data', (chunk) => {
console.log(chunk.toString());
});
流的写入处理需要使用可写流的 write
方法或者使用 writeableStream.end()
方法来结束写入。
使用 write
方法:
writableStream.write('Hello world!', 'UTF8');
使用 end
方法:
writableStream.end();
流是Node.js中非常强大的一种抽象接口,它支持异步处理数据,可以按需读写大量数据,还可以被链接起来处理数据流。本文介绍了 Node.js 中四种基本的流类型,包括可读流、可写流、双向流和转换流的使用方法,同时也介绍了流的读取处理和写入处理。在Node.js中有很多流模块可以使用,比如fs
、zlib
、http
和net
等,可以加强Node.js的处理能力和数据处理的效率。