node 可读流与可写流的运用详解

Node 可读流与可写流的运用详解

概述

在 Node.js 中,读写操作一般来说都会使用流的方式进行。其中可读流提供了一种将数据从 source 输出到 destination 的抽象方式;而可写流则提供了一种将数据写入 destination 的抽象方式。对于数据中间处理过程,我们可以使用管道(piping)的方式链接可读流和可写流。

可读流

核心方法

Node.js 中可读流分为多种类型,如 fs.createReadStreamhttp.IncomingMessage 等。这些不同类型的可读流都有一些相同的方法:

  • read(): 从可读流中读取数据,该方法会返回可读流缓存区中的数据,如果缓存区为空,则返回 null。
  • on('data', callback): 当从可读流中读取到数据时,会触发 data 事件,这个回调函数会被调用,回调函数的第一个参数就是读取到的数据。
  • on('end', callback): 当可读流中的数据被读取完毕时,会触发 end 事件,回调函数会被调用。

示例1:从文件中读取数据

下面是一个从文件中读取数据的例子:

const fs = require('fs');
const rs = fs.createReadStream('input.txt');

rs.on('data', (chunk) => {
  console.log(`Received ${chunk.length} bytes of data.`);
});

rs.on('end', () => {
  console.log('File reading is finished.');
});

上述代码中,我们使用 createReadStream 方法创建了一个可读流,并指定要读取的源文件是 input.txt。之后,我们监听了可读流的 data 事件和 end 事件。当有数据可读时,会将数据按照 chunk 的方式传递给data 事件的回调函数,并输出收到的数据长度。当可读流中的数据读取完毕时,会触发 end 事件,回调函数会被调用并输出提示。

可写流

核心方法

Node.js 中可写流分为多种类型,如 fs.createWriteStreamhttp.ServerResponse 等。这些不同类型的可写流都有一些相同的方法:

  • write(chunk, [callback]): 将数据写入可写流中。
  • end([chunk], [encoding], [callback]): 停止写入数据,当参数被指定时,会先调用 write 方法写入数据,之后触发 finish 事件。

示例2:将数据写入文件

下面是一个将数据写入文件的例子:

const fs = require('fs');
const ws = fs.createWriteStream('output.txt');

ws.write('Hello, ');
ws.write('world!');
ws.end();

ws.on('finish', () => {
  console.log('File writing is finished.');
});

上述代码中,我们使用 createWriteStream 方法创建了一个可写流,并指定要写入的目标文件是 output.txt。之后,我们先使用 write 方法将数据写入缓存区中,然后通过 end 方法停止写入数据,并触发 finish 事件。在该事件的回调函数中,我们输出了文件写入完成的提示信息。

管道

管道是一种将可读流和可写流链接起来的方式,使得数据可以直接从可读流中流向可写流中,而不需要在中间创建额外的缓存区。

示例3:将文件中的数据写入另一个文件

下面是一个将文件中的数据写入另一个文件的例子:

const fs = require('fs');
const rs = fs.createReadStream('input.txt');
const ws = fs.createWriteStream('output.txt');

rs.pipe(ws);

ws.on('finish', () => {
  console.log('Data has been piped.');
});

上述代码中,我们使用 createReadStream 方法创建了一个可读流,并指定要读取的源文件是 input.txt,使用 createWriteStream 方法创建了一个可写流,并指定要写入的目标文件是 output.txt。之后,我们使用 pipe 方法将可读流和可写流链接起来,直接将数据从 input.txt 中读取出来,以 chunk 的方式传递到 output.txt 中,这个过程中不需要借助额外的缓存区。在数据被写入 output.txt 文件之后,会触发 finish 事件,并输出提示信息。

总结

通过本文,我们学习了 Node 可读流和可写流的基本知识,包括了可读流的核心方法和示例,可写流的核心方法和示例,以及如何使用管道将两个流链接起来。对于低内存消耗和高效处理大文件来说,应用流实现数据处理是一种非常有效的方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:node 可读流与可写流的运用详解 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • 从0搭建vue-cli4脚手架

    下面详细讲解从0搭建vue-cli4脚手架的完整攻略。 简介 Vue.js是一个渐进式JavaScript框架,旨在实现简单、易学、高效、灵活的开发方式。Vue-cli是vuejs官方提供的一个基于Webpack的脚手架工具,可以快速搭建SPA应用程序的基本开发框架,是Vuejs的标准构建工具,也是Vue项目开发的标配。 本文将详细讲述如何从0开始搭建Vue…

    node js 2023年6月8日
    00
  • nvm mac 环境搭建过程

    下面是“nvm mac 环境搭建过程”的完整攻略,具体过程如下: 安装 Homebrew 使用 Terminal 进行安装,打开终端,输入以下命令: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"…

    node js 2023年6月8日
    00
  • JavaScript+node实现三级联动菜单

    为了让大家更好地了解“JavaScript+Node实现三级联动菜单”的完整攻略,我会从以下几个方面进行详细讲解: 菜单的基本结构 数据的获取和存储 联动菜单的实现 两个示例 下面,我们将一步步展开。 1. 菜单的基本结构 三级联动菜单的基本结构应该类似于下面这个代码块: <div> <select id="province&qu…

    node js 2023年6月8日
    00
  • 详解react应用中的DOM DIFF算法

    详解 React 应用中的 DOM DIFF 算法 在 React 中,每一个组件的 UI 表现都是通过 JavaScript 对象来描述的,这些 JavaScript 对象就是 Virtual DOM。在 React 应用中,当 Virtual DOM 发生变化时,React 会利用 DOM DIFF 算法来计算出应该对哪些实际的 DOM 元素进行操作,从…

    node js 2023年6月8日
    00
  • Highcharts+NodeJS搭建数据可视化平台示例

    下面给出Highcharts+NodeJS搭建数据可视化平台的完整攻略。 准备工作 安装NodeJS 首先,我们需要安装NodeJS。在官网上下载对应操作系统的安装包,然后安装即可。 安装Express 接着,我们需要安装Express。在命令行中执行以下命令: npm install express 安装Highcharts 最后,我们需要安装Highch…

    node js 2023年6月8日
    00
  • NodeJs Express路由使用流程解析

    下面是关于Node.js Express路由使用流程的完整攻略。 什么是路由? 路由是Web应用中控制URI(或称为URL)请求的一部分。它是基于URL和HTTP方法(如GET、POST、PUT和DELETE)来选择一个处理程序(handler)。 在Node.js中,我们可以使用Express框架来构建Web应用程序,Express可以让我们很方便地处理H…

    node js 2023年6月8日
    00
  • node模块机制与异步处理详解

    Node模块机制与异步处理详解 1. Node模块机制 Node的模块机制是通过CommonJS规范实现的,它允许我们将代码封装成可重用的模块,并在不同的文件中进行引用。Node中有三种类型的模块: 核心模块:Node内置的模块,例如fs和http。 文件模块:位于本地文件系统中的模块,通过相对或绝对路径引用。 第三方模块:由NPM管理的模块,可以通过req…

    node js 2023年6月8日
    00
  • node.js中的fs.writeFile方法使用说明

    以下是针对“node.js中的fs.writeFile方法使用说明”的完整攻略,包含了使用方法、参数说明和示例演示: 使用方法 fs.writeFile() 是 Node.js 提供的一个用于写入文件的方法,具体语法如下: fs.writeFile(file, data[, options], callback) 其中,各个参数的含义如下: file:要写入…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部