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

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

  • Writable    -  用于写操作的流。

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

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

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

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

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

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

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

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

读取流

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

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

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

var fs=require("fs");var data='';//Create a readable streamvar readerStream=fs.createReadStream('input.txt');//Set the encoding to be utf8.
readerStream.setEncoding('UTF8');//Handle stream events --> data, end, and error
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 EndedTutorials 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';//Create a writable streamvar writerStream=fs.createWriteStream('output.txt');//Write the data to stream with encoding to be utf8
writerStream.write(data,'UTF8');//Mark the end of file
writerStream.end();//Handle stream events --> finish, and error
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 EndedWrite completed.

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

Simply Easy Learning

管道流

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

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

var fs=require("fs");//Create a readable streamvar readerStream=fs.createReadStream('input.txt');//Create a writable streamvar writerStream=fs.createWriteStream('output.txt');//Pipe the read and write operations//read input.txt and write data to output.txt
readerStream.pipe(writerStream);console.log("Program Ended");

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

$node main.js

验证输出。

Program Ended

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

Tutorials 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');//Compress the file input.txt to 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');//Decompress the file input.txt.gz to 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/article-nodejs/nodejs_streams

无涯教程:Node.js - Streams介绍相关推荐

  1. 视频教程-Node.JS - socket.io教程-Node.js

    Node.JS - socket.io教程 全栈开发工程师,现职于北京一家学院的全栈教学主任. 8年前端开发经验.4年移动端开发经验.4年UI设计经验.3年一线教学经验. 精通Node.JS.PHP. ...

  2. (8)Node.js 模块介绍

    一.Node.js模块介绍 模块(包)是 Node.js 中具有特定功能的对象. 二.web浏览器端和Node端的对比图 我们通过如上图可以看到,再web浏览器端的基本语法,再Node端也能使用,但是 ...

  3. 【英文】Node.js Streams: Everything you need to know //转载

    by Samer Buna Update: This article is now part of my book "Node.js Beyond The Basics". Rea ...

  4. java文件边读边写_[Java教程]node.js 利用流实现读写同步,边读边写

    [Java教程]node.js 利用流实现读写同步,边读边写 0 2017-09-10 13:00:14 //10个数 10个字节,每次读4b,写1blet fs=require("fs&q ...

  5. java爬虫拉勾网_[Java教程]node.js爬虫爬取拉勾网职位信息

    [Java教程]node.js爬虫爬取拉勾网职位信息 0 2017-03-14 00:00:21 简介 用node.js写了一个简单的小爬虫,用来爬取拉勾网上的招聘信息,共爬取了北京.上海.广州.深圳 ...

  6. node.js htttp文件服务器 遇到目录时搜索目录内默认html页面 廖雪峰javascript教程node.js中http部分练习题

    廖雪峰javascript教程node.js中http部分最后的练习题: https://www.liaoxuefeng.com/wiki/1022910821149312/1023025830950 ...

  7. Node.js 发展史介绍与安装初体验

    点击上方蓝字关注我们 关于作者 作者简介: 公众号:Flowlet 最近打算做一个个人的Blog系统,用于技术交流与个人主页展示,起初打算通过Wordpress+VPS部署在云上,后来看了下腾讯云CV ...

  8. node.js的介绍

    [编者按]:Node.js从2009年诞生至今,已经发展了两年有余,其成长的速度有目共睹.从在github的访问量超过Rails,到去年底Node.jsS创始人Ryan Dalh加盟Joyent获得企 ...

  9. 【学习笔记】node.js基础介绍

    Node.js的基本概念 Node.js是编写高性能网络服务器的Javascript工具包(用JS开发服务端程序). 特点:单线程.异步.事件驱动: 举个Apache服务器运行方式的例子,比如线程池里 ...

最新文章

  1. 多视图立体匹配论文分享:BlendedMVS
  2. 人工智能落地之路:从概念验证到产品
  3. 局域网内时间同步的一种简单办法
  4. c语言中int的取值范围_c语言入门(1)
  5. LeetCode MySQL 618. 学生地理信息报告(row_number)
  6. 如何部署一个Kubernetes集群
  7. 【数据库】Mysql函数DATE_ADD() 增加日期/时间
  8. python读取ansi编码文件,如何在Python中同时读取ANSI和Unicode txt文件?
  9. mysql in memory_In-Memory:内存数据库
  10. [转] Java内部类详解
  11. 今年中秋云遮月,来年元宵雨打灯
  12. 【路径规划】基于matlab遗传结合模拟退火算法仓库拣货小车最优路径规划【含Matlab源码 649期】
  13. Circular Sequence
  14. 程序静默安装的参数总结
  15. 英语语法-----一般现在时
  16. 事件研究法python代码
  17. 工具 | 分享一个很酷的上位机软件
  18. 2022全国视力防控展,中国爱眼教育大会
  19. 逻辑 - 联言命题,选言命题
  20. Matlab不同版本之间中文注释乱码的解决方法

热门文章

  1. 常见出血性疾病的实验诊断题库【1】
  2. 微信小程序模板消息测试- formId 的获取
  3. win10打开谷歌浏览器chrome,并进入kiosk模式
  4. 钱文忠解读《弟子规》读后感
  5. windows云服务器,如何使用windows云服务器
  6. template-模板完全特化
  7. 近9分的生信杂志发了一篇Venn图工具大比拼
  8. 数据分析必看的oCPM/oCPC核心知识点
  9. MobileNext:打破常规,依图逆向改造inverted residual block | ECCV 2020
  10. 使用Python实现12306自动化抢票