📜  Node.js 流

📅  最后修改于: 2022-05-13 01:56:54.059000             🧑  作者: Mango

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 中有四种类型的流。

  1. 可写:我们可以将数据写入这些流。示例: fs.createWriteStream()。
  2. 可读性:我们可以从这些流中读取数据。示例: fs.createReadStream()。
  3. 双工:既可写又可读的流。示例: net.socket。
  4. 转换:可以在写入和读取数据时修改或转换数据的流。示例: 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