nodejs笔记4(steam)

流(stream)在 Node.js 中是处理流数据的抽象接口(abstract interface)。 stream 模块提供了基础的 API 。使用这些 API 可以很容易地来构建实现流接口的对象。从程序角度而言流是有方向的数据,简单的说 流 就是数据的加工操作与传递。

nodejs中关于 流 的操作都封装的 stream 模块中。

Node.js,Stream 有四种流类型:
Readable - 可读操作。
Writable - 可写操作。
Duplex - 可读可写操作.
Transform - 操作被写入数据,然后读出结果。
所有的 Stream 对象都是 EventEmitter 的实例。常用的事件有:
data - 当有数据可读时触发。
end - 没有更多的数据可读时触发。
error - 在接收和写入过程中发生错误时触发。
finish - 所有数据已被写入到底层系统时触发。

1.复制文件数据

fs接口:用于与文件系统进行交互,所有文件的系统操作都有同步和异步两种方式。

fs.createReadStream(path[, options])readFiles的区别:

createReadStream是给你一个ReadableStream,你可以听它的'data',一点一点儿处理文件,用过的部分会被GC,所以占内存少。
readFile是把整个文件全部读到内存里。

const fs = require('fs');//文件系统模块

// 创建可读流
const rs = fs.createReadStream('hello.txt');
//创建可写操作流程
const ws = fs.createWriteStream('./result/result.txt');
将rs的内容结果复制进ws下的文件内
rs.pipe(ws);

有个值得注意地方:数据必须是从上游 pipe 到下游,也就是从一个 readable 流 pipe 到 writable 流。

2.为什么应该使用 Stream

有个用户需要在线看视频的场景,假定我们通过 HTTP 请求返回给用户电影内容,那么代码可能写成这样

const http = require('http');
const fs = require('fs');

http.createServer((req, res) => {
   fs.readFile(moviePath, (err, data) => {
      res.end(data);
   });
}).listen(8080);

http.createServer([requestListener])
由于该方法属于http模块,使用前需要引入http模块(var http= require(“http”) )。
该函数用来创建一个HTTP服务器,并将 requestListener 作为 request 事件的监听函数

以上的代码会造成2个问题
1.电影文件需要读完之后才能返回给客户,等待时间超长
2.电影文件需要一次放入内存中,相似动作多了,内存吃不消

用流可以讲电影文件一点点的放入内存中,然后一点点的返回给客户(利用了 HTTP 协议的 Transfer-Encoding: chunked 分段传输特性),用户体验得到优化,同时对内存的开销明显下降

const http = require('http');
const fs = require('fs');

http.createServer((req, res) => {
   fs.createReadStream(moviePath).pipe(res);
}).listen(8080);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,692评论 19 139
  • https://nodejs.org/api/documentation.html 工具模块 Assert 测试 ...
    KeKeMars阅读 6,610评论 0 6
  • 运动会,正午带着耳机去了学校,本来是单耳,运动会太过于吵闹,便成了双耳。 抵达学校后,遇到一个老爷爷,老爷爷一边盯...
    李柑and嘞扣阅读 408评论 0 0
  • 周末和老友约在大卫城相聚,来的早了些就在九楼带着孩子玩沙堡。刚刚坐下,旁边一个戴眼镜的男士就搭讪着一边叫姐一边拿出...
    娜年娜梦阅读 595评论 0 2

友情链接更多精彩内容