文档章节

NodeJS Stream

我语文超级不好
 我语文超级不好
发布于 2016/11/21 14:03
字数 559
阅读 4
收藏 0
点赞 0
评论 0

Stream 是一个抽象接口,Node 中有很多对象实现了这个接口。例如,对http 服务器发起请求的request 对象就是一个 Stream,还有stdout(标准输出)。

Node.js,Stream 有四种流类型:

  • Readable - 可读操作。

  • Writable - 可写操作。

  • Duplex - 可读可写操作.

  • Transform - 操作被写入数据,然后读出结果。

所有的 Stream 对象都是 EventEmitter 的实例。常用的事件有:

  • data - 当有数据可读时触发。

  • end - 没有更多的数据可读时触发。

  • error - 在接收和写入过程中发生错误时触发。

  • finish - 所有数据已被写入到底层系统时触发。

 

从流中读取数据

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

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

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

// 处理流事件 --> 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("程序执行完毕");

写入流

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

// 创建一个可以写入的流,写入到文件 output.txt 中
var writerStream = fs.createWriteStream('output.txt');

// 使用 utf8 编码写入数据
writerStream.write(data,'UTF8');

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

// 处理流事件 --> data, end, and error
writerStream.on('finish', function() {
    console.log("写入完成。");
});

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

console.log("程序执行完毕");

管道流

管道提供了一个输出流到输入流的机制。通常我们用于从一个流中获取数据并将数据传递到另外一个流中。

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("程序执行完毕");

链式流

链式是通过连接输出流到另外一个流并创建多个对个流操作链的机制。链式流一般用于管道操作。

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("文件压缩完成。");

执行完以上操作后,我们可以看到当前目录下生成了 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("文件解压完成。");

 

© 著作权归作者所有

共有 人打赏支持
我语文超级不好
粉丝 0
博文 8
码字总数 0
作品 0
朝阳
架构师
Node.js 8.11.3 和 10.4.1 发布,JavaScript 运行时

Node.js 8.11.3 和 10.4.1 发布了,更新内容如下: 8.11.3 Notable Changes buffer (CVE-2018-7167): Fixes Denial of Service vulnerability where calling Buffer.fill() could hang http......

淡漠悠然 ⋅ 06/14 ⋅ 0

Node v10.4.0 发布,升级 V8 引擎至 6.7.288.43 版本

Node v10.4.0 已发布,该版本主要是将 V8 引擎升级到了 6.7.288.43 版本,还包括一些改进。 deps: 升级 V8 至 6.7.288.43 版本 (Michaël Zasso) #19989 stream: 确保 Stream.pipeline 在没有...

局长 ⋅ 06/07 ⋅ 0

Node 8.8.0、6.11.5 和 4.8.5 发布,你在用哪版?

Node 同时更新了 3 个版本。 Node v8.8.0 (Current) 主要更新包括: crypto: expose ECDH class #8188 http2: http2 is now exposed by defualt without the need for a flag #15685 a new ......

王练 ⋅ 2017/10/25 ⋅ 13

Node.js v0.10.1 稳定版发布

Node.js v0.10.1 稳定版发布了,主要改进记录包括: npm: upgrade to 1.2.15 crypto: Improve performance of non-stream APIs (Fedor Indutny) tls: always reset this.ssl.error after han......

oschina ⋅ 2013/03/22 ⋅ 14

Node.js 0.9.11 开发版发布

Node.js 发布最新开发版 0.9.11 ,改进内容包括: V8: downgrade 3.14.5 openssl: update to 1.0.1e darwin: Make process.title work properly (Ben Noordhuis) fs: Support mode/flag opti......

oschina ⋅ 2013/03/02 ⋅ 0

Node.js v0.8.28/v0.10.30 发布

Node.js v0.8.28 发布,此版本是个维护版本: v8:中断不能掩盖堆栈溢出(Fedor Indutny) 相关链接 源代码: http://nodejs.org/dist/v0.8.28/node-v0.8.28.tar.gz Macintosh Installer (Univ...

oschina ⋅ 2014/08/01 ⋅ 5

Node.js 8.11.2 Carton LTS 发布,多项更新

Node.js 8.11.2 Carton LTS 已发布,稳定更新内容如下: deps: update node-inspect to 1.11.3 (Jan Krems) #18354 update nghttp2 to 1.29.0 (James M Snell) #17908 http2: Sync with curr......

达尔文 ⋅ 05/16 ⋅ 0

Node.js 0.9.10 开发版发布

Node.js 0.9.10 开发版发布了,主要改进包括: V8: Upgrade to 3.15.11.15 npm: Upgrade to 1.2.12 fs: Change default WriteStream config, increase perf (isaacs) process: streamlining......

oschina ⋅ 2013/02/20 ⋅ 1

Node.js 10.3.0 发布,基于 V8 的 JavaScript 运行时

Node.js 10.3.0 发布了,此次更新内容如下: deps: 更新 npm 到 6.1.0 (Rebecca Turner) #20190 fs: 修复 pos > 4GB 的读取 (Mathias Buus) #21003 net: 新的选项允许所有用户可以读写 IPC ...

雨田桑 ⋅ 05/30 ⋅ 0

Node.js v6.8.1 (Current) 发布,多个重要更新

Node.js v6.8.1 (Current) 发布了。Node.js 是一套用来编写高性能网络服务器的 JavaScript 工具包,本次值得关注的更新如下: build: Fix building with shared zlib. (Bradley T. Hughes) ...

局长 ⋅ 2016/10/16 ⋅ 7

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 1

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

CentOS开机启动subversion

建立自启动脚本: vim /etc/init.d/subversion 输入如下内容: #!/bin/bash## subversion startup script for the server## chkconfig: 2345 90 10# description: start the subve......

随风而飘 ⋅ 昨天 ⋅ 0

Nginx + uwsgi @ubuntu

uwsgi 安装 sudo apt-get install python3-pip # 注意 ubuntu python3默认没有安装pippython3 -m pip install uwsgi 代码(test.py) def application(env, start_response): start_res......

袁祾 ⋅ 昨天 ⋅ 0

版本控制工具

CSV , SVN , GIT ,VSS

颖伙虫 ⋅ 昨天 ⋅ 0

【2018.06.19学习笔记】【linux高级知识 13.1-13.3】

13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令

lgsxp ⋅ 昨天 ⋅ 0

LVM

LVM: 硬盘划分分区成物理卷->物理卷组成卷组->卷组划分逻辑分区。 1.磁盘分区: fdisk /dev/sdb 划分几个主分区 输入t更改每个分区类型为8e(LVM) 使用partprobe生成分区的文件:如/dev/sd...

ZHENG-JY ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部