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 ...
随机推荐
- cmake方式使用vlfeat
目录 environment statement compile vlfeat with cmake compile example project with cmake 1. make sure c ...
- EF Core MYSQL 生成表映射配置问题
Model表 public class Goods { public string ID { get; set; } public string CreatedBy { get; set; } pub ...
- Oracle数据库查看表空间是否为自增的
表空间是有数据文件组成的,所以看表空间是否自增即看数据文件,如下查自增的表空间: select tablespace_name,file_name,autoextensible from dba_da ...
- 一脸懵逼学习基于CentOs的Hadoop集群安装与配置(三台机器跑集群)
1:Hadoop分布式计算平台是由Apache软件基金会开发的一个开源分布式计算平台.以Hadoop分布式文件系统(HDFS)和MapReduce(Google MapReduce的开源实现)为核心的 ...
- centos6.x完全禁用IPv6的方法
https://blog.csdn.net/prettyshuang/article/details/51731890
- Socket.Io+HttpWebRequest 请求Api
Socket 接收代码 <html> <head> <title>Socket Client Demo</title> <script src=& ...
- @+id/和android:id有什么区别?
Any View object may have an integer ID associated with it, to uniquely identify the View within the ...
- Qt界面设计基础
一.安装Qt相关基本组件: 在ubuntu上安装,可以直接使用如下的命令来安装: sudo apt-get install ubuntu-sdk 详细的安装方法可以参考这篇文章:https://blo ...
- SVM:利用SVM算法实现手写图片识别(数据集50000张图片)—Jason niu
import mnist_loader # Third-party libraries from sklearn import svm def svm_baseline(): training_dat ...
- 二、网络编程-socket之TCP协议开发客户端和服务端通信
知识点:之前讲的udp协议传输数据是不安全的,不可靠不稳定的,tcp协议传输数据安全可靠,因为它们的通讯机制是不一样的.udp是用户数据报传输,也就是直接丢一个数据包给另外一个程序,就好比寄信给别人, ...