node中的流的介绍(Stream)
Stream是一个抽象接口,Node中有很多对象实现了这个接口。例如,对http服务器发起请求的request对象就是一个Stream,还有stdout(标准输出)。
Node.js,Stream有四种流类型:
- Readable--可读操作。
- Writable--可写操作。
- Duplex--可读可写操作。
- Transform--操作被写入数据,然后读出结果。
所有的Stream对象都是EventEmitter的实列。常用的事件有:
- data--当有数据可读时触发。
- end--没有更多的数据可读时触发。
- error--在接收和写入过程中发生错误时触发。
- finish--所有数据已被写入到底层系统时触发。
1、Readable
可读流的例子包括:
- HTTP responses, on the client
- HTTP requests, on the server
- fs read streams
- zlib streams
- crypto streams
- TCP sockets
- child process stdout and stderr
process.stdin
以fs为例创建一个可读流:
fs.createReadStream(path,[options]);
- path --- 要读取文件的路径
- options --- 一个数组对象包含:
flags:指定用什么模式打开,“w”代表写,“r”代表读。
endoding:编码格式“utf8","ascii","base64"三种格式,默认“utf8”。
highWaterMark:水位线
autoClose:为true时(默认行为),对错误或结束的文件描述符将自动关闭,为 false时,文件描述符将不会被关闭,即使他们报错了。
start:开始读取的字节位置
end:结束读取的字节位置。
创建一个1.txt文件,内容:asdfasd
同一目录下创建一个js文件
let fs = require("fs");
let path = require("path");
let readable = fs.createReadStream(path.join(__dirname,"./1.txt"),{flags: 'r',encoding: 'utf8',autoClose: true,mode: "0666",
});
readable.on('data', function(chunk){console.log( chunk.length, chunk);
});
//7 'asdfasd'复制代码
可读的流有两种模式:
流动模式:数据会自动从来源流出,直到来源数据耗尽。
暂停模式:你得通过stream.read()主动去要数据,不要数据就一直等在那。
可读流在创建时都是暂停模式。暂停模式和流动模式可以相互转换。
2、Writable
可写流的例子包括了:
- HTTP requests, on the client
- HTTP responses, on the server
- fs write streams
- zlib streams
- crypto streams
- TCP sockets
- child process stdin
process.stdout
,process.stderr
例如:
let fs = require("fs");
let path = require("path");
let writable = fs.createWriteStream(path.join(__dirname,"./1.txt"),{flags: 'w',encoding: 'utf8',autoClose: true,mode: "0666",
});
writable.on('finish', function(){console.log('写入完成');process.exit(0);
});
writable.write('node修炼中...', 'utf8');
writable.end();
//写入完成复制代码
3、Duplex
Duplex 流的实例包括了:
- TCP sockets
- zlib streams
- crypto streams
4、Transform
变换流的实例包括:
- zlib streams
- crypto streams
node中的流的介绍(Stream)相关推荐
- 简单认识和使用node 中的流(stream)
为什么要用流 - 如果整体读写, 文件比较大 ,一次性读取就会占用大量内存,效率低下,而且内存是非常珍贵的,所有就有了流的诞生. - 流是将数据分隔段 ,一段一段的读取,效率很高 复制代码 流是什么 ...
- 什么流读取MultipartFile_深入理解并运用Node中的IO模型流
在 NodeJs 中,流随处可见,读/写文件流,HTTP请求/返回流,stdin/stdout流.理解并运用好流会让你的Node更具力量. Stream lib/_stream_readable.js ...
- Java中的流式编程
Stream是Java 8提供的新功能,是对集合(Collection)对象功能的增强,能对集合对象进行各种非常便利.高效的聚合操作(aggregate operation),或大批量数据操作 (bu ...
- Node.js: 认识流stream
流是Node.js中一个非常重要的概念, 也是Node.js之所以适用于I/O密集型场景的重要原因之一. 流是Node.js移动数据的方式,流可以是可读的和/或可写的.在Node.js中很多模块都使用 ...
- node中的Stream-Readable和Writeable解读
在node中,只要涉及到文件IO的场景一般都会涉及到一个类-Stream.Stream是对IO设备的抽象表示,其在JAVA中也有涉及,主要体现在四个类-InputStream.Reader.Outpu ...
- 深入理解 Java中的 流 (Stream)
个人小站,正在持续整理中,欢迎访问:http://shitouer.cn 小站博文地址:深入理解 Java中的 流(Stream)机制 最近在看<Hadoop:The Definitive Gu ...
- java的输出流包括_【转】输入/输出流 - 深入理解Java中的流 (Stream)
基于流的数据读写,太抽象了,什么叫基于流,什么是流?Hadoop是Java语言写的,所以想理解好Hadoop的Streaming Data Access,还得从Java流机制入手.流机制也是JAVA及 ...
- 第八节:详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架
前言 大家好,给大家带来详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架的概述,希望你们喜欢 JAVA 异常 try...catch...finally结构的使用方法 class Tes ...
- java 中的流_深入理解Java中的流(Stream)
首先,流是什么? 流是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入/输出操作都是以"流"的方式进行.设备可以是文件,网络,内存等. 流具有方向性,至于是输入 ...
最新文章
- SQLServer2000 数据库恢复模型详解
- React、Vue、Angular对比 ---- 介绍及优缺点
- 2020-11-8(activity状态以及任务栈)
- linux-IO之copy的实现
- No resource found that matches the given name 'android:Widget.Material.ActionButton'.
- C/C++中调用api设置mysql连接的编码方式
- 基站位置查询系统_木牛导航网络基站服务免费了!——更便捷、更高效、更省心!...
- guid会重复吗_知网查重会查重表格吗
- oracle把多行合并成字符串,怎样将Oracle多行转换成字符串?
- 【开发者成长】Vue.js 中有哪些性能陷阱
- regex match
- js页面自适应屏幕大小_Web页面适配移动端方案研究
- Spring 定时执行任务重复执行多次
- UDP穿越NAT原理(p2p)
- 较完整的 bean生命周期
- Spring Boot网上图书商城
- 58同城架构师谈:亿级流量架构演进
- 动态标题文字PR模板 300+高质量MOGRT字幕PR动态图形模板包
- FFT从入门到使用(ACM/OI)
- 唐探、小说家、李焕英,哪一部贺岁档电影值得一看
热门文章
- 为什么Python在数据科学领域比R更受欢迎呢?
- 微软北大联合提出换脸 AI 和脸部伪造检测器,演绎现实版「矛与盾」?
- 顶会「扩招」,一地鸡毛:ICLR2020近半数审稿人未发过相关论文
- 深度学习神经网络都是从CNN和AlexNet开始的
- 关于机器学习和AI的区别最经典的解释
- 讨论Markov Random Field和Gibbs Random Field心得
- 干货丨人脸识别必读的N篇文章
- Tensorflow— 下载google图像识别网络inception-v3并查看结构
- Python 之 matplotlib (七)Scatter
- FragmentManager的简单使用