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中被实现 ...
随机推荐
- [Flux] 3. Actions
Actions contain no functionality, but rather describe an event in our application. In this lesson we ...
- 使用vi是方向键变乱码 退格键不能使用的解决方法
一.编辑/etc/vim/vimrc.tiny 由于/etc/vim/vimrc.tiny的拥有者是root用户,所以要在root的权限下对这个文件进行修改.很简单,这个文件里面的倒数第二句话是“se ...
- Hive数据导入
可以通过多种方式将数据导入hive表 1.通过外部表导入 用户在hive上建external表,建表的同时指定hdfs路径,在数据拷贝到指定hdfs路径的同时,也同时完成数据插入external表. ...
- Java基础知识强化之集合框架笔记26:LinkedList的特有功能
1. LinkedList的特有功能: (1)添加功能 public void addFirst(Object e) public void addLast(Object e) ( ...
- SQL Server中的20个系统变量
1.@@CONNECTIONS返回自上次启动 Microsoft SQL Server以来连接或试图连接的次数.示例:下面的示例显示了到当前日期和时间为止试图登录的次数.SELECT GETDATE( ...
- 你的网站为什么会慢?——用YSlow为你的网站提速
在前面的文章我翻译的文章中分别从内容.服务器.JavaScript和CSS.图片.Coockies和移动应用等几个方面总结了34条提高网站性能的黄金守则,但是这些守则中,有一些是不常用到的,若非有实力 ...
- lucene 抛出的异常(分享)
1) too many boolean clauses异常 例如: String keyword=".......";//(keyword的长度太长) Query indexQue ...
- Python - BeautifulSoup 安装
BeautifulSoup 3.x 1. 下载 BeautifulSoup. [huey@huey-K42JE python]$ wget http://www.crummy.com/software ...
- app图标和启动页设置
弄了一下午,终于把iOS中图标的设置和启动页的设置弄明白了.我想以后再也不会浑了. 进入正题: 一:apple 1).iPhone4s 3.5寸屏,也就是640*960,但在模拟器上正常用的是320* ...
- 解决Undefined symbols for architecture x86_64: 报错 和 ld: warning: ld: warning: ignoring file警告
出现这种错误的情况: 用iphone5模拟器编译程序正常, 用iphone5s以上的模拟器编译出现Undefined symbols for architecture x86_64: 报错 和 ld: ...