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)相关推荐

  1. 简单认识和使用node 中的流(stream)

    为什么要用流 - 如果整体读写, 文件比较大 ,一次性读取就会占用大量内存,效率低下,而且内存是非常珍贵的,所有就有了流的诞生. - 流是将数据分隔段 ,一段一段的读取,效率很高 复制代码 流是什么 ...

  2. 什么流读取MultipartFile_深入理解并运用Node中的IO模型流

    在 NodeJs 中,流随处可见,读/写文件流,HTTP请求/返回流,stdin/stdout流.理解并运用好流会让你的Node更具力量. Stream lib/_stream_readable.js ...

  3. Java中的流式编程

    Stream是Java 8提供的新功能,是对集合(Collection)对象功能的增强,能对集合对象进行各种非常便利.高效的聚合操作(aggregate operation),或大批量数据操作 (bu ...

  4. Node.js: 认识流stream

    流是Node.js中一个非常重要的概念, 也是Node.js之所以适用于I/O密集型场景的重要原因之一. 流是Node.js移动数据的方式,流可以是可读的和/或可写的.在Node.js中很多模块都使用 ...

  5. node中的Stream-Readable和Writeable解读

    在node中,只要涉及到文件IO的场景一般都会涉及到一个类-Stream.Stream是对IO设备的抽象表示,其在JAVA中也有涉及,主要体现在四个类-InputStream.Reader.Outpu ...

  6. 深入理解 Java中的 流 (Stream)

    个人小站,正在持续整理中,欢迎访问:http://shitouer.cn 小站博文地址:深入理解 Java中的 流(Stream)机制 最近在看<Hadoop:The Definitive Gu ...

  7. java的输出流包括_【转】输入/输出流 - 深入理解Java中的流 (Stream)

    基于流的数据读写,太抽象了,什么叫基于流,什么是流?Hadoop是Java语言写的,所以想理解好Hadoop的Streaming Data Access,还得从Java流机制入手.流机制也是JAVA及 ...

  8. 第八节:详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架

    前言 大家好,给大家带来详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架的概述,希望你们喜欢 JAVA 异常 try...catch...finally结构的使用方法 class Tes ...

  9. java 中的流_深入理解Java中的流(Stream)

    首先,流是什么? 流是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入/输出操作都是以"流"的方式进行.设备可以是文件,网络,内存等. 流具有方向性,至于是输入 ...

最新文章

  1. SQLServer2000 数据库恢复模型详解
  2. React、Vue、Angular对比 ---- 介绍及优缺点
  3. 2020-11-8(activity状态以及任务栈)
  4. linux-IO之copy的实现
  5. No resource found that matches the given name 'android:Widget.Material.ActionButton'.
  6. C/C++中调用api设置mysql连接的编码方式
  7. 基站位置查询系统_木牛导航网络基站服务免费了!——更便捷、更高效、更省心!...
  8. guid会重复吗_知网查重会查重表格吗
  9. oracle把多行合并成字符串,怎样将Oracle多行转换成字符串?
  10. 【开发者成长】Vue.js 中有哪些性能陷阱
  11. regex match
  12. js页面自适应屏幕大小_Web页面适配移动端方案研究
  13. Spring 定时执行任务重复执行多次
  14. UDP穿越NAT原理(p2p)
  15. 较完整的 bean生命周期
  16. Spring Boot网上图书商城
  17. 58同城架构师谈:亿级流量架构演进
  18. 动态标题文字PR模板 300+高质量MOGRT字幕PR动态图形模板包
  19. FFT从入门到使用(ACM/OI)
  20. 唐探、小说家、李焕英,哪一部贺岁档电影值得一看

热门文章

  1. 为什么Python在数据科学领域比R更受欢迎呢?
  2. 微软北大联合提出换脸 AI 和脸部伪造检测器,演绎现实版「矛与盾」?
  3. 顶会「扩招」,一地鸡毛:ICLR2020近半数审稿人未发过相关论文
  4. 深度学习神经网络都是从CNN和AlexNet开始的
  5. 关于机器学习和AI的区别最经典的解释
  6. 讨论Markov Random Field和Gibbs Random Field心得
  7. 干货丨人脸识别必读的N篇文章
  8. Tensorflow— 下载google图像识别网络inception-v3并查看结构
  9. Python 之 matplotlib (七)Scatter
  10. FragmentManager的简单使用