首页 > web前端 > js教程 > node.js流的基础知识

node.js流的基础知识

Lisa Kudrow
发布: 2025-02-20 10:07:10
原创
266 人浏览过

The Basics of Node.js Streams

在I/O-BON-BOND操作方面,

node.js是异步和事件驱动的。 利用Node.js流通过有效处理较小块中的数据来大大简化这些任务。让我们深入研究溪流的世界,看看它们如何简化I/O。

密钥概念:

    通过处理可管理的部分中的数据,
  • node.js流(异步和事件驱动的)优化I/O。
  • >流被归类为可读,可写的或双工的(既可以阅读又可写的)。 可读的流从源获取数据;可写的流将数据发送到目的地。
  • 功能是无价的,可以促进源和目的地之间无缝的数据传输,而无需手动流量管理。 pipe()>
  • Readable.pause()的方法提供对数据流的颗粒状控制,增强了流功能。Readable.resume() readable.unpipe()
理解流:

>流类似于Unix管道,从而使数据传输从源到目的地毫无疑问。 本质上,流是具有专门方法的流。 实现的方法确定流是可读,可写的还是双工的。 可读的流提供数据输入;可写的流处理数据输出。

>您可能已经在node.js中遇到了流。 在HTTP服务器中,该请求是可读的流,并且响应是可写的流。 EventEmitter模块提供可读和可写的文件流功能。>

本文专注于可读和可写的流。双工流不在其范围之内。

fs

>可读流:

>可读的流从源读取数据(文件,内存缓冲区或其他流)。 在 s时,它们会触发各种事件。我们利用这些事件与流相互作用。

从流中读取:

EventEmitter最常见的方法是聆听

>事件并附加回调。 当数据可用时,

事件会触发,执行回调。

>创建一个可读的流。 最初是静态的,它开始在附加a

>事件侦听器时流动。 然后将数据块传递给回调。 事件的频率由流实现确定(例如,HTTP请求可能会散发出每几个kb的事件,而文件流可能每行发射)。 datadata事件向数据结束发出信号。

>
const fs = require('fs');
const readableStream = fs.createReadStream('file.txt');
let data = '';
readableStream.on('data', (chunk) => { data += chunk; });
readableStream.on('end', () => { console.log(data); });
登录后复制
登录后复制
替代,在流实例上反复调用

,直到读取所有数据:>

const fs = require('fs');
const readableStream = fs.createReadStream('file.txt');
let data = '';
readableStream.on('data', (chunk) => { data += chunk; });
readableStream.on('end', () => { console.log(data); });
登录后复制
登录后复制

read()从内部缓冲区检索数据。 当没有数据保留时,它将返回nullreadable事件指示数据可用性。

>

>设置编码:

数据通常是

>对象。 对于字符串,使用BufferReadable.setEncoding()>

const fs = require('fs');
const readableStream = fs.createReadStream('file.txt');
let data = '';
let chunk;
readableStream.on('readable', () => {
  while ((chunk = readableStream.read()) !== null) {
    data += chunk;
  }
});
readableStream.on('end', () => { console.log(data); });
登录后复制
这将数据解释为UTF-8,将其作为字符串传递给回调。

管道:

> 管道简化了源和目标之间的数据传输:

const fs = require('fs');
const readableStream = fs.createReadStream('file.txt');
let data = '';
readableStream.setEncoding('utf8');
readableStream.on('data', (chunk) => { data += chunk; });
readableStream.on('end', () => { console.log(data); });
登录后复制
>自动处理数据流。

> pipe()

链接:

>可以链接:

这个解压缩
const fs = require('fs');
const readableStream = fs.createReadStream('file1.txt');
const writableStream = fs.createWriteStream('file2.txt');
readableStream.pipe(writableStream);
登录后复制
并将结果写入

>。input.txt.gz> output.txt

其他可读流方法:

>

    :暂停流。
  • Readable.pause()
  • :恢复暂停的流。
  • Readable.resume()
  • :从管道中删除目标流。>
  • readable.unpipe()
  • 可写的流:

可写的流将数据发送到目的地。 像可读的流一样,它们是s。

写入流:EventEmitter

>使用

发送数据:>

>返回表明成功的布尔值。 如果是错误的,则流暂时满;等待write()>事件,然后再写更多内容。

const fs = require('fs');
const zlib = require('zlib');
fs.createReadStream('input.txt.gz')
  .pipe(zlib.createGunzip())
  .pipe(fs.createWriteStream('output.txt'));
登录后复制

数据的结尾: write() drain>呼叫

向数据结束发出信号。 刷新所有数据后,发出

事件。 打电话后不能写

重要的可写流事件:

end()> finish end()

:指示一个错误。

> :发出可读的流时发出的。

>
  • :在可读的流上调用error时发出。
  • >
  • pipe
  • 结论:
  • unpipe>流是Node.js的强大功能,增强了I/O效率。 了解流,管道和链接可以使写作清洁,性能的代码。unpipe()>
node.js流式常见问题:

>

>什么是node.js streams?

它们是允许对数据进行有效的,增量处理的对象,避免将整个数据集加载到存储器中。>

Node.js流的主要类型

    可读,可写的,双工和变换。
  • >

    >创建一个可读的流?
  • 用于可读流的常见用例?

    >创建一个可写的流?
  • >可写流的常见用途?将数据保存到文件,将数据发送到服务。

  • 双面流?

  • >
  • >转换流?>修改数据通过时(例如,压缩,加密)。

    >

    >流之间的管道数据?
  • 使用Node.js流?>

    最佳实践? .pipe()

以上是node.js流的基础知识的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板