以下是关于 Node.js 中 Stream 的一些基本概念和用法:
1. 可读流(Readable Stream):
可读流用于从数据源读取数据。例如,从文件系统、网络或其他数据源读取数据。
const fs = require('fs');
const readableStream = fs.createReadStream('example.txt');
readableStream.on('data', (chunk) => {
console.log(`Received ${chunk.length} bytes of data.`);
});
readableStream.on('end', () => {
console.log('Finished reading data.');
});
2. 可写流(Writable Stream):
可写流用于向目标写入数据。例如,向文件系统、网络或其他目标写入数据。
const fs = require('fs');
const writableStream = fs.createWriteStream('output.txt');
writableStream.write('Hello, World!', 'utf-8');
writableStream.end(); // 结束写入操作
3. 双工流(Duplex Stream):
双工流是可读流和可写流的结合,可以同时进行读写操作。例如,一个 TCP 连接就是一个双工流。
const net = require('net');
const duplexStream = net.connect(3000, 'localhost');
duplexStream.on('data', (chunk) => {
console.log(`Received ${chunk.length} bytes of data.`);
});
duplexStream.write('Hello, Server!', 'utf-8');
4. 转换流(Transform Stream):
转换流是一种特殊的双工流,用于在读取和写入数据时进行转换。例如,可以使用转换流进行数据压缩或解压缩。
const zlib = require('zlib');
const readableStream = fs.createReadStream('example.txt');
const gzipStream = zlib.createGzip();
const writableStream = fs.createWriteStream('example.txt.gz');
readableStream.pipe(gzipStream).pipe(writableStream);
5. 使用 pipe 连接流:
pipe 方法用于连接流,将一个流的输出直接传递给另一个流的输入。这样可以简化流的处理。
const readableStream = fs.createReadStream('example.txt');
const writableStream = fs.createWriteStream('output.txt');
readableStream.pipe(writableStream);
6. 事件和流:
流是事件的实例,可以通过监听事件来处理流中的数据。
readableStream.on('data', (chunk) => {
console.log(`Received ${chunk.length} bytes of data.`);
});
writableStream.on('finish', () => {
console.log('Finished writing data.');
});
7. 使用流处理 HTTP 请求和响应:
可以使用流来处理 HTTP 请求和响应,例如通过 http.createServer 创建一个 HTTP 服务器。
const http = require('http');
const fs = require('fs');
const server = http.createServer((req, res) => {
const readableStream = fs.createReadStream('example.txt');
readableStream.pipe(res);
});
server.listen(3000, () => {
console.log('Server is listening on port 3000');
});
这是关于 Node.js 中 Stream 的一些基础概念和用法。Stream 是一个强大的工具,可以帮助你更有效地处理大量数据,而不需要将所有数据加载到内存中。详细了解流的工作原理和不同类型的流对于构建高性能的 Node.js 应用程序非常重要。
转载请注明出处:http://www.zyzy.cn/article/detail/13160/Node.js