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日

相关文章

  • Node.JS用纯JavaScript生成图片或滑块式验证码功能

    要使用Node.js生成图片或滑块式验证码,需要使用两个主要的库:canvas和svg-captcha。下面将详细介绍如何使用这两个库生成验证码。 安装所需库 首先,需要在终端中使用以下命令安装所需库: npm install canvas svg-captcha 生成普通图片验证码 步骤一:引用所需库 const { createCanvas, loadI…

    node js 2023年6月8日
    00
  • 详解如何解决使用JSON.stringify时遇到的循环引用问题

    当使用 JSON.stringify() 方法时,如果对象包含循环引用,将会导致 JSON.stringify() 抛出异常并停止执行。为了解决这个问题,可以采用以下两种解决方案。 1. 自定义序列化函数 我们可以自定义对象的序列化函数,通过特定的逻辑过滤循环引用的情况,然后调用 JSON.stringify() 方法进行序列化。下面是一个示例代码: fun…

    node js 2023年6月8日
    00
  • node.js中事件触发器events的使用方法实例分析

    我们就来详细讲解一下“node.js中事件触发器events的使用方法实例分析”。 什么是Events? Events是 Node.js 的内置模块,用于实现异步事件驱动的架构。在node.js中,很多函数都支持事件回调的方式进行使用,例如HTTP服务的request事件、file模块的readfile事件等。 Node.js 中的许多对象都会分发事件:一个…

    node js 2023年6月8日
    00
  • node.js爬虫框架node-crawler初体验

    下面是对“node.js爬虫框架node-crawler初体验”的详细讲解。 什么是node.js爬虫框架node-crawler? node-crawler是一个基于node.js的爬虫框架,它的特点是能够像jQuery一样,通过选择器选择页面的元素进行数据抓取。使用node-crawler可以轻松地构建一个爬虫应用程序,提取特定网站的数据内容,适用于各种…

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

    当提及”node.js中的buffer.length方法”时,我们通常是指Buffer对象的length属性。它返回Buffer中存储的数据的字节长度。 使用方法很简单,只需要在一个Buffer实例上调用length属性即可获取该实例占用的字节长度。例如: const buf = Buffer.from(‘hello world’, ‘utf8’); con…

    node js 2023年6月8日
    00
  • Node.js数据库钩子的使用

    Node.js是一个非常流行的服务器端运行时环境,可以使用它来构建高效的应用程序。在Node.js应用程序中,我们经常需要连接到数据库,并在数据库读取或写入数据时执行某些操作。Node.js提供了一种非常强大的技术 – 数据库钩子,可以用于在数据库读写操作的执行前或执行后自动执行某些特定的代码。 什么是数据库钩子 数据库钩子是一种让你在数据库执行查询或写入操…

    node js 2023年6月8日
    00
  • nodejs前端模板引擎swig入门详解

    让我来详细讲解一下“nodejs前端模板引擎swig入门详解”的完整攻略。 标题 nodejs前端模板引擎swig入门详解 简介 Swig是一款简单、快速、可扩展的 JavaScript 模板引擎。Swig能够在Node.js和浏览器中运行,因此它不仅适用于服务器端的视图,还适用于浏览器端的JavaScript模板引擎。Swig具有一个内置缓存系统,能显著提…

    node js 2023年6月8日
    00
  • NodeJs在Linux下使用的各种问题解决

    Node.js在Linux下使用的各种问题解决攻略 Node.js是一种在Linux操作系统上运行的JavaScript运行时环境。然而,在使用Node.js时,用户可能会遇到各种问题。本文将介绍使用Node.js时可能遇到的各种问题,并提供解决方法。 各种问题解决方法 问题1:安装Node.js失败 如果在安装Node.js时遇到问题,可以使用以下方法解决…

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