首页 > 编程语言 >无涯教程-Node.js - Streams

无涯教程-Node.js - Streams

时间:2024-01-21 10:31:52浏览次数:23  
标签:Node main fs 无涯 js Streams var input txt

Stream流是使您可以连续地从源读取数据或将数据写入目标的对象,在Node.js中,有四种类型的流-

  • Readable    -  用于读取操作的流。

  • Writable     -  用于写操作的流。

  • Duplex        -  可用于读取和写入操作的流。

  • Transform  - 一种双工流,其中基于输入来计算输出。

每种类型的流都是一个 EventEmitter 实例,例如,一些常用事件是-

  • data      - 当有可读取的数据时,将触发此事件。

  • end       - 当没有更多数据可读取时,将触发此事件。

  • error    -  接收或写入数据时发生任何错误。

  • finish   - 当所有数据都已刷新到系统时,将触发此事件。

本教程提供了对流上常用操作的基本了解。

读取流

创建一个名为input.txt的文本文件,其内容如下:

Learnfk Point is giving self learning content
to teach the world in simple and easy way!!!!!

使用以下代码创建一个名为main.js的js文件-

var fs=require("fs");
var data='';

//创建可读流
var readerStream=fs.createReadStream('input.txt');

//设置编码为utf8。
readerStream.setEncoding('UTF8');

//处理流事件 --> 数据、结束和错误
readerStream.on('data', function(chunk) {
   data += chunk;
});

readerStream.on('end',function() {
   console.log(data);
});

readerStream.on('error', function(err) {
   console.log(err.stack);
});

console.log("Program Ended");

现在运行main.js以查看输出-

$node main.js

验证输出。

Program Ended
Learnfk Point is giving self learning content
to teach the world in simple and easy way!!!!!

写入流

使用以下代码创建一个名为main.js的js文件-

var fs=require("fs");
var data='Simply Easy Learning';

//创建可写流
var writerStream=fs.createWriteStream('output.txt');

//将数据写入流,编码为 utf8
writerStream.write(data,'UTF8');

//标记文件结尾
writerStream.end();

//处理流事件 --> 完成和错误
writerStream.on('finish', function() {
   console.log("Write completed.");
});

writerStream.on('error', function(err) {
   console.log(err.stack);
});

console.log("Program Ended");

现在运行main.js以查看输出-

$node main.js

验证输出。

Program Ended
Write completed.

现在打开在当前目录中创建的output.txt;它应包含以下内容-

Simply Easy Learning

管道流

管道是一种机制,无涯教程将一个流的输出作为另一流的输入,它通常用于从一个流中获取数据并将该流的输出传递到另一流,管道操作没有限制。现在,无涯教程将展示一个管道示例,该示例用于读取一个文件并将其写入另一个文件。

使用以下代码创建一个名为main.js的js文件-

var fs=require("fs");

//创建可读流
var readerStream=fs.createReadStream('input.txt');

//创建可写流
var writerStream=fs.createWriteStream('output.txt');

//管道读取和写入操作
//读取 input.txt 并将数据写入 output.txt
readerStream.pipe(writerStream);

console.log("Program Ended");

现在运行main.js以查看输出-

$node main.js

验证输出。

Program Ended

打开在当前目录中创建的output.txt;它应包含以下内容-

Learnfk Point is giving self learning content
to teach the world in simple and easy way!!!!!

链接流

链接是一种将一个流的输出连接到另一流并创建多个流操作的链的机制,通常用于管道操作,现在,无涯教程将使用管道和链接来压缩文件,然后将其解压缩

使用以下代码创建一个名为main.js的js文件-

var fs=require("fs");
var zlib=require('zlib');

//压缩文件 input.txt 为 input.txt.gz
fs.createReadStream('input.txt')
   .pipe(zlib.createGzip())
   .pipe(fs.createWriteStream('input.txt.gz'));
  
console.log("File Compressed.");

现在运行main.js以查看输出-

$node main.js

验证输出。

File Compressed.

您会发现input.txt已被压缩,并在当前目录中创建了文件input.txt.gz。现在让无涯教程尝试使用以下代码解压缩同一文件-

var fs=require("fs");
var zlib=require('zlib');

//解压文件 input.txt.gz 为 input.txt
fs.createReadStream('input.txt.gz')
   .pipe(zlib.createGunzip())
   .pipe(fs.createWriteStream('input.txt'));
  
console.log("File Decompressed.");

现在运行main.js以查看输出-

$node main.js

验证输出。

File Decompressed.

参考链接

https://www.learnfk.com/nodejs/nodejs-streams.html

标签:Node,main,fs,无涯,js,Streams,var,input,txt
From: https://blog.51cto.com/u_14033984/9354494

相关文章

  • node-red__function_1
               ......
  • 无涯教程-MATLAB - Octave
    GNUOctave是像MATLAB这样的高级编程语言,它与MATLAB大部分兼容。它也用于数值计算。Octave与MATLAB具有以下共同特征-矩阵是基本数据类型它具有对复数的内置支持它具有内置的数学函数和库它支持用户定义的函数GNUOctave也是可免费重新发行的软件,您可以根据自由软件基金会......
  • 无涯教程-MATLAB - 变换(Transforms)
    MATLAB提供了用于处理变换的命令,例如Laplace和Fourier变换,转换在科学和工程中用作简化分析并从另一个角度查看数据的工具。例如,傅立叶变换允许我们将表示为时间函数的信号转换为频率函数,拉普拉斯变换使我们能够将微分方程转换为代数方程。MATLAB提供了laplace,傅立叶和fft命......
  • 无涯教程-MATLAB - 多项式(Polynomials)
    MATLAB将多项式表示为行向量,其中包含按降序排序的系数。例如,方程P(x)=x4+7x3-5x+9可以表示为-p=[170-59];判断多项式polyval函数用于以指定值判断多项式。例如,要判断我们先前的多项式p,在x=4处,键入-p=[170-59];polyval(p,4)MATLAB执行上述语句并返......
  • 无涯教程-MATLAB - 代数(Algebra)
    到目前为止,我们已经看到所有示例都可以在MATLAB及其GNU(也称为Octave)中运行,但是对于求解基本的代数方程,MATLAB和Octave几乎没有什么不同,因此我们将尝试在单独的部分中介绍MATLAB和Octave。我们还将讨论代数表达式的分解和简化。MATLAB中代数方程solve函数用于求解代数方程,......
  • 无涯教程-MATLAB - 微积分(Calculus)
    MATLAB提供了多种方法来解决微分和积分问题,求解任意程度的微分方程式以及计算极限,最重要的是,您可以轻松求解复杂函数的图,并通过求解原始函数及其导数来检查图上的最大值,最小值。本章将讨论微积分的问题,在本章中,我们将讨论预演算的概念,即计算函数的极限并验证极限的性质。计算极......
  • 无涯教程-MATLAB - 绘图(Plotting)
    要绘制函数图,您需要执行以下步骤-通过为变量x指定值的范围定义x,为此函数绘制定义函数y=f(x)以plot(x,y)以下示例将演示该概念。让我们用简单的函数y=x绘制x的值范围(从0到100),增量为5。创建一个脚本文件并输入以下代码-x=[0:5:100];y=x;plot(x,y)运行文件时,MAT......
  • 无涯教程-MATLAB - 数据输出
    MATLAB中的数据导出意味着写入文件,MATLAB允许您在另一个读取ASCII文件的应用程序中使用数据,为此,MATLAB提供了几种数据导出选项。有两种方法可以将数字数组导出为定界的ASCII数据文件-使用save函数并指定-ascii限定符使用dlmwrite函数使用保存函数的语法是-savemy_data.......
  • 无涯教程-MATLAB - 字符串(Strings)
    在MATLAB中创建字符串非常简单,实际上,我们已经使用了很多次。例如,您在命令提示符下键入以下内容-my_string='LearnfkPoint'MATLAB将执行上述语句并返回以下输出-my_string=LearnfkPointMATLAB将所有变量视为数组,而字符串则视为字符数组,让我们使用whos命令检查上面创建的变......
  • node-sass 安装出错 Cannot download "https://github.com/sass/node-sass...
    Downloadingbinaryfromhttps://github.com/sass/node-sass/releases/download/v4.14.1/win32-x64-83_binding.nodeCannotdownload"https://github.com/sass/node-sass/releases/download/v4.14.1/win32-x64-83_binding.node": github网站大多时候都访问不到,下载 win32-x......