DAY18: 浅谈Stream

今天要记录的是Stream,当我在研读这个部分时,发现我的参考书介绍的比较简略一点,但实际查资料也发现Stream在Nodjs占了举足轻重的位置。所以今天会把研读的重点做个整理。
在第DAY12:HTTP前情提要中,介绍Buffer处有短暂提到Stream。
Stream是Nodejs中的流式数据,而Stream模块给予基本的API,而在前几篇的实作中也都有Stream的影子在,
像是文件的读取:

//HTTP请求文件(内容为转换的状态)
var http=require("http");
var fs=require("fs");
var server=http.createServer((req,res)=>
{
    fs.readFile("./Heartbeat.txt",(err,data)=>
{
        res.end(data);
    }); 
});
server.listen(3000);

每接到一次请求,会把butterfly.txt读进记忆体,再取出给客户端。
前提是,因为butterfly.txt内容"小",若有一份内容"大"的要读取,
依照前面所述的步骤,会消耗不少服务器的记忆体,使用者等待的时间就会变长。

Stream总共有四个基础类型以及常见的例子:

  • Readable: 可读流 (ex: fs.creatReadStream() )
    是数据生产者(sourse),也就是提供数据的源头。
  • Writable: 可写流 (ex: fs.creatWriteStream() )
    是数据消耗者,也就是数据最後的目标。
  • Duplex: 双工流 (ex: net.Socket)
    同时拥有Readable与Writable,输入与输出之间存在转换的关系,可以因为输入与输出的长度不一样。
  • Transform: 转换流 (ex: zlib.creatDflate() )
    同样也具备Readable与Writable,只是与Duplex不同的是输入和输出需要一样。像是压缩、解压缩。

Stream都是Event(EventEmmitter)的实例。
其实也可以说Stream是Event与Buffer的混合版
还有一个很重要的东西!就是pipe方法!

pipe()

pipe就像是一个管道,把流与流之间都串连起来,发挥到最大的效用!
pipe会串连数据生产者与数据消耗者,可以多个数据串接。通常对於复制数据很方便!!

总结:
明天会继续做Stream相关的例子,今天的部分,若有理解错误,再请指教!!
另外,附上我在理解Stream时,查阅到的一些网站,觉得很有帮助贴出来与大家分享,
他们比我的更专业解说得更清楚!非常感谢这些专业人士与网站。


<<:  [Day15] Storybook - Publish Storybook (Static web application & Chromatic)

>>:  [Day 15] 卷积类明星模型大乱斗

【没钱买ps,PyQt自己写】Day 3 - 用 pyinstaller 将 python 程序打包,把每天的成果分享给你的亲朋好友

看完这篇文章你会得到的成果图 因为 PyQt5 要学的东西太多, 我们先来学打包 python 好了...

使用贴图新增与移除身分组

使用Auttaja 点击Dashboard 选择Assignable & Giveable ...

Day 24:霍夫曼编码(Huffman coding)

这回写到的霍夫曼编码是在Algorithms Illuminated Part 3: Greedy ...

DAY 11 Big Data 5Vs – Velocity(多样性)

另一个常见资料库分类是从「资料处理*」的应用角度来区分: 交易型Transaction: OLTP:...

< 关於 React: 开始打地基| 表单内的显示元素,map() ShowAdd 与Key >

09-13-2021 前言: 当我们需要的资料越多越繁杂时,我们所需要的是一个可以快速把按照我们所...