Node.js流
什么是流?
流是可以从一个源读取或写入数据到连续的目标对象。在Node.js,有四种类型的数据流。
Readable - 其是用于读操作。
Writable - 用在写操作。
Duplex - 其可以用于读取和写入操作。
Transform - 输出基于输入的地方进行计算的一种双相流。
每种类型的流是一个EventEmitter实例,并抛出的时代不同的实例几个事件。例如,一些常用的事件是:
data - 当有数据可读取此事件。
end - 当没有更多的数据读取此事件被触发。
error - 当有任何错误或接收数据写入此事件。
finish - 当所有数据已刷新到底层系统触发此事件
本教程将让您了解关于数据流的常用操作。
从流中读取
创建一个名为input.txt的文本文件有以下内容
Yiibai Point is giving self learning content to teach the world in simple and easy way!!!!!
创建一个js文件名为main.js里面有如下代码:
var fs = require("fs"); var data = ''; // Create a readable stream var 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 Ended Yiibai Point is giving self learning content to teach the world in simple and easy way!!!!!
写入流
创建一个js文件名为main.js的文件,里面有如下代码:
var fs = require("fs"); var data = 'Simply Easy Learning'; // Create a writable stream var 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 Ended Write completed.
现在打开在当前目录中创建output.txt文件,验证output.txt文件中有以下内容。
Simply Easy Learning
管道流
管道是我们提供一个流的输出作为输入到另一个流的机制。它通常被用于从一个流中获取数据,并通过该流输出到另一个流。没有对管道的操作没有限制。现在,我们将展示一个管道从一个文件中读取和写入到另一个文件的例子。
创建一个js文件名为main.js里面有如下代码:
var fs = require("fs"); // Create a readable stream var readerStream = fs.createReadStream('input.txt'); // Create a writable stream var 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文件,并验证output.txt文件中有以下内容。
Yiibai Point is giving self learning content to teach the world in simple and easy way!!!!!
链式流
链式是一个机制,一个流的输出连接到另一个流,并创建一个链多流操作。它通常用于管道的操作。现在,我们将使用管道和链接先压缩文件,然后解压缩。
创建一个js文件名为main.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.
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创优秀实例教程
转载请注明:文章转载自:易百教程 [http:/www.yiibai.com]
本文标题:Node.js流
本文地址:http://www.yiibai.com/nodejs/nodejs_streams.html
Node.js流的更多相关文章
- Node.js 流
稳定性: 2 - 不稳定 流是一个抽象接口,在 Node 里被不同的对象实现.例如request to an HTTPserver 是流,stdout 是流.流是可读,可写,或者可读写.所有的流是 E ...
- node.js流复制文件
转自:http://segmentfault.com/a/1190000000519006 nodejs的fs模块并没有提供一个copy的方法,但我们可以很容易的实现一个,比如: var source ...
- Node.js——流的下载
https://cnodejs.org/topic/59d8f43b2543cb3368b1623e var request = require('request'); var fs = requir ...
- 极简 Node.js 入门 - 4.5 双工流
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- Node.js精进(3)——流
在 JavaScript 中,一般只处理字符串层面的数据,但是在 Node.js 中,需要处理网络.文件等二进制数据. 由此,引入了Buffer和Stream的概念,两者都是字节层面的操作. Buff ...
- Node.js Streams:你需要知道的一切
Node.js Streams:你需要知道的一切 图像来源 Node.js流以难以使用而闻名,甚至更难理解.好吧,我有个好消息 - 不再是这样了. 多年来,开发人员在那里创建了许多软件包,其唯一目的是 ...
- Node.js核心入门
前言: 因为以前学习Node.js并没有真正意义上的去学习它,而是粗略的学习了npm的常用命令和Node.js一些模块化的语法,因此昨天花了一天的时间看了<Node.js开发指南>一书.通 ...
- 有用的内置Node.js APIs
前言 在构建你的第一个Node.js应用程序时,了解node开箱即用的实用工具和API是很有帮助的,可以帮助解决常见的用例和开发需求. 有用的Node.js APIs Process:检索有关环境变量 ...
- [Node.js] Node.js中的流
原文地址:http://www.moye.me/2015/03/29/streaming_in_node/ 什么是流? 说到流,就涉及到一个*nix的概念:管道——在*nix中,流在Shell中被实现 ...
随机推荐
- Java 执行jar linux 实例
需求:通过执行jar的方式 ,把某个文件路径下的用户数据同步到redis 1.main 函数 public class Main { private static Logger logger = Lo ...
- PIC16F877A最小功能板 - 原理图系列
一.顶层 主要由port转换.MCU.复位.键盘.晶振和显示等5部分电路组成. 二.模块层 1. port转换电路 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZ ...
- Android无法更新sdk的解决办法
修改 windows/system32/drivers/etc/hosts 文件 添加 203.208.46.146 dl.google.com203.208.46.146 dl-ssl.google ...
- 全面分析 Spring 的编程式事务管理及声明式事务管理--转
开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本 ...
- ubuntu环境配置之vi 配置【转载】
ubuntu环境配置之vi 配置 [日期:2014-02-10] 来源:Linux社区 作者:zhonghe1114 [字体:大 中 小] Android的源码开发,几乎离不开Linux,Lin ...
- iOS Sqlite3 Demo 及 FMDB Demo
本文是主要实现了三个函数: testSQLite3 是测试系统自带的sqlite3的demo testFMDB是测试FMDB存取简单的数据类型的 的demo testFMDB2是将任意对象作为一个整体 ...
- python-集合(第二篇(七):集合)
第二篇(七):集合 python 集合 集合标准操作 摘要: 说明: ·类似于数学中学的集合,Python中的集合可以实现去重的功能,通过set()函数来实现: ·sets支持x in set, ...
- 关于SqlServer修改数据库常用信息的方法
--系统表里存放各个数据库属性信息的表之一SELECT name AS [Logical Name], physical_name AS [DB File Path],type_desc AS [Fi ...
- 关于NetworkInfo对象的isConnected()与isAvailable()
public class MainActivity extends Activity{ /** Called when the activity is first created. */ ...
- 客户端session与服务端session
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...