NodeJS Stream流
NodeJS Stream流
流数据在网络通信中至关重要,nodeJS用Stream提供了一个抽象接口,node中有很多对象实现了这个接口,提供统一的操作体验
基本流类型
NodeJS中,Stream有四种类型:
- Readable-可读操作
- Writable-可写操作
- Duplex-可读写操作
- Transform - 操作被写入数据,然后读出结果
所有的嗯Stream对象都是EventEmitter对象的实例,常用事件有:
- data-当有数据可读时触发
- end-没有更多的数据可读时触发
- error-在接收和写入过程中发生错误时触发
- finish-所有数据已被写入到底层系统时触发
数据读取
var fs = require('fs')
var data = ''
// 创建可读流
var readerStream = fs.createReadStream('input.txt')
// 处理流事件
// 读取时
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 = '测试数据'
// 创建一个写入流
var writerStream = fs.createWriteStream('output.txt')
// 使用utf8格式写入数据
writerStream.write(data, "utf-8")
// 标记文件结尾,触发finish
writerStream.end()
// 处理流事件
writerStream.on('finish', function() {
console.log("写入完成");
});
writerStream.on('error', function(err){
console.log(err.stack);
});
管道流
管道流可以连接输入流和输出流,可以实现大文件(如大于内存)的复制
var fs = require('fs')
// 创建一个可读流
var readerStream = fs.createReadStream('1.png')
// 创建一个写入流
var writerStream = fs.createWriteStream('2.png')
// 管道连接流对象
readerStream.pipe(writerStream)
链式流
用于连续操作
/*compress.js*/
var fs = require('fs')
var zlib = require('zlib')
// 用gzip压缩input.txt
fs.createReadStream('input.txt')
.pipe(zlib.createGzip())
.pipe(fs.createWriteStream('input.txt.gz'))
console.log('文件压缩完成')
/*decompress.js*/
var fs = require('fs')
var zlib = require('zlib')
// 用gzip解压input.txt.gz
fs.createReadStream('input.txt.gz')
.pipe(zlib.createGunzip())
.pipe(fs.createWriteStream('input2.txt'))
console.log('文件解压完成')
NodeJS Stream流的更多相关文章
- 理解nodejs中的stream(流)
阅读目录 一:nodeJS中的stream(流)的概念及作用? 二:fs.createReadStream() 可读流 三:fs.createWriteStream() 可写流 回到顶部 一:node ...
- NodeJS Stream 二:什么是 Stream
对于大部分有后端经验的的同学来说 Stream 对象是个再合理而常见的对象,但对于前端同学 Stream 并不是那么理所当然,github 上甚至有一篇 9000 多 Star 的文章介绍到底什么是 ...
- nodejs stream 手册学习
nodejs stream 手册 https://github.com/jabez128/stream-handbook 在node中,流可以帮助我们将事情的重点分为几份,因为使用流可以帮助我们将实现 ...
- Nodejs stream模块-翻译
花了两天时间尝试按照自己的话翻译了一下stream模块,以下内容皆翻译于:https://nodejs.org/api/stream.html. 目录 1 Stream(流) 1.1 ...
- 9、Node.js Stream(流)
#########################################################################介绍Node.js Stream(流)Stream 是 ...
- Atiti 重定向标准输出到字符串转接口adapter stream流体系 以及 重定向到字符串
Atiti 重定向标准输出到字符串转接口adapter stream流体系 以及 重定向到字符串 原理::syso 向ByteArrayOutputStream这个流理想write字节..然后可以使 ...
- 在stream流和byte[]中查找(搜索)指定字符串
在 stream流 和 byte[] 中查找(搜索)指定字符串 这里注重看的是两个 Search 的扩展方法,一个是 stream 类型的扩展,另一个是 byte[] 类型的扩展, 如果大家有更好的“ ...
- 这可能是史上最好的 Java8 新特性 Stream 流教程
本文翻译自 https://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples/ 作者: @Winterbe 欢迎关注个人微信公众 ...
- (六)jdk8学习心得之Stream流
六.Stream流 1. 什么是stream流 现阶段,可以把stream流看成一个高级版的Iterator.普通的Iterator只能实现遍历,遍历做什么,就需要具体些功能代码函数了.而这个stre ...
随机推荐
- SSD垃圾回收
A complete GC typically:includes four steps: selecting some blocks that contain somestale data as vi ...
- Oracle数据库表索引失效,解决办法:修改Oracle数据库优化器模式
ALTER SYSTEM SET OPTIMIZER_MODE=RULE scope=both; 其他可以选择的模式还有ALL_ROWS/CHOOSE/FIRST_ROWS/ALL_ROWS. 应用系 ...
- proc/net/dev实时网速统计实例
https://blog.csdn.net/dosthing/article/details/80384541 http://www.l99.com/EditText_view.action?text ...
- [转]Spring Boot修改最大上传文件限制:The field file exceeds its maximum permitted size of 1048576 bytes.
来源:http://blog.csdn.net/awmw74520/article/details/70230591 SpringBoot做文件上传时出现了The field file exceeds ...
- Spring boot国际化
国际化主要是引入了MessageSource,我们简单看下如何使用,以及其原理. 1.1 设置资源文件 在 properties新建i18n目录 新建message文件: messages.prope ...
- 【Android】Android 广播大全
[Android]Android 广播大全 String ADD_SHORTCUT_ACTION 动作:在系统中添加一个快捷方式. String ALL_APPS_ACTION 动作:列举所有可用的应 ...
- psp表格记录-
PSP2.1 Personal Software Process Stages Time Planning 计划 · Estimate · 估计这个任务需要多少时间 12 Development 开发 ...
- 019 python面相对象编程
一:self的意思 1.说明 self代表类的实例,而非类. 类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self. self 代表的是类的实例 ...
- C#中的 Stream
目录: 什么是Stream? 什么是字节序列? Stream的构造函数 Stream的重要属性及方法 Stream的示例 Stream异步读写 Stream 和其子类的类图 本章总结 什么是Strea ...
- Maya cmds pymel 获取安装选择顺序选择的物体
Maya cmds pymel 获取安装选择顺序选择的物体 import maya.cmds as cmds 先设置选择顺序 cmds.selectPref(trackSelectionOrder = ...