Node.js 流
流是 Node.js 的基本概念之一。流是一种数据处理方法,用于按顺序将输入读取或写入输出。流用于以有效的方式处理读取/写入文件或交换信息。
Node.js 官方文档将流定义为“流是在 Node.js 中处理流数据的抽象接口”。 stream 模块提供了实现流接口的 API。 Node.js 中流对象的示例可以是对 HTTP 服务器的请求,并且 process.stdout 都是流实例。简而言之,Streams 是 Node.js 中的对象,它允许用户以连续的方式从源读取数据或将数据写入目标。
访问流:
const stream = require('stream');
注意:在处理大量数据时,流的强大之处在于,流不是一次将文件全部读入内存,而是实际读取数据块,处理其内容数据而不将其全部保存在内存中。
Streams 相对于其他数据处理方法的优势:
- 省时:我们不必等到整个文件传输完毕。我们一有数据就可以开始处理。
- 内存高效:在开始处理之前,我们不必在内存中加载大量数据。
Node.js 中的流类型:Node.js 中有四种类型的流。
- 可写:我们可以将数据写入这些流。示例: fs.createWriteStream()。
- 可读性:我们可以从这些流中读取数据。示例: fs.createReadStream()。
- 双工:既可写又可读的流。示例: net.socket。
- 转换:可以在写入和读取数据时修改或转换数据的流。示例: zlib.createDeflate。
一些使用流的 Node API 是:
- net.Socket()
- 进程.stdin()
- 进程.stdout()
- 进程.stderr()
- fs.createReadStream()
- fs.createWriteStream()
- 网络连接()
- http.request()
- zlib.createGzip()
- zlib.createGunzip()
- zlib.createDeflate()
- zlib.createInflate()
实现可读流:我们将从 inStream 读取数据并使用 process.stdout 将其回显到标准输出。
// Sample JavaScript Code for creating
// a Readable Stream
// Accessing streams
const { Readable } = require('stream');
// Reading the data
const inStream = new Readable({
read() { }
});
// Pushing the data to the stream
inStream.push('GeeksForGeeks : ');
inStream.push(
'A Computer Science portal for Geeks');
// Indicates that no more data is
// left in the stream
inStream.push(null);
// Echoing data to the standard output
inStream.pipe(process.stdout);
输出:
GeeksForGeeks : A Computer Science portal for Geeks
实现可写流:在 outStream 中,我们简单地将块作为字符串console.log 。我们还调用回调函数来指示成功,没有任何错误。我们将从 inStream 读取数据并使用 process.stdout 将其回显到标准输出。
// Sample JavaScript Code for
// Writable Stream
// Accessing Streams
const { Writable } = require('stream');
// Whatever is passed in standard
// input is out streamed here.
const outStream = new Writable({
// The Write function takes three
// arguments
// Chunk is for Buffer
// Encoding is used in case we want
// to configure the stream differently
// In this sample code, Encoding is ignored
// callback is used to indicate
// successful execution
write(chunk, encoding, callback) {
console.log(chunk.toString());
callback();
}
});
// Echo the data to the standard output
process.stdin.pipe(outStream);
输出:
Hello Geeks