【第2章 Node.js基础】2.7 Node.js 的流(一)可写流

🌈可写流

🚀什么是可写流

可写流是对数据被写入的目的地的一种抽象。

所有可写流都实现了 stream.Writable类定义的接口。

可写流的例子包括,也都是实现了可写流接口的双工流

  • 客户端的 HTTP 请求、
  • 服务器的HTTP 响应、
  • fs 的写入流、
  • zlib 流、
  • crypto 流、
  • TCP Socket、
  • 子进程 stdin、
  • process.stdout、
  • process.stderr等。

尽管可写流的具体实例可能略有差别,但所有可写流都遵循同一基本的使用模式,下面用一个示例解释这种模式:

const myStream = getWritableStreamSomehow();
myStream.write('一些数据');
myStream.write('更多数据');
myStream.end('完成写入数据');

stream.Writable 类定义的主要事件如下。

  • close:当流或其底层资源被关闭时被触发。不是所有可写流都会触发该事件。
  • drain: 如果调用 stream.write(chunk)方法返回 false,则当可以继续写入数据到流时会触发该
    事件。
  • error: 写入数据发生错误时被触发。当触发该事件时,流还未被关闭。
  • finish: 调用 stream.end()方法且缓冲数据都已传给底层系统之后被触发
  • pipe:当在可读流上调用 stream.pipe()方法时被触发。
  • unpipe:当在可读流上调用 stream.unpipe()方法时被触发。当可读流通过管道流向可写流发生错误时,也会触发该事件。

🐯案例:fs 的写入流

const fs = require("fs");
let writeStream = fs.createWriteStream("outpuut.txt");
let str = "爱上一个不回家的人";
writeStream.write(str,'UTF8');
writeStream.end();
writeStream.on('finish',()=>{
    console.log("写入完成");
})
writeStream.on('error',(error)=>{
    console.log("写入失败:",error);
})

⭐️动图演示

在这里插入图片描述

🐯案例:process.stdout

进程 I/O 同样也是 Writable 和 EventEmitter 的实例,耳听为虚眼见为实,请同学们可以打印:

const stream = require("stream");
const events = require("events");

console.log(process.stdout instanceof stream.Writable); // true
console.log(process.stdout instanceof events.EventEmitter); // true
process.stdout.write('你好!');
process.stderr.write('报错了啦')

在 node.js 中 console.log 内部就是由 process.stdout 实现的。对应 console.error 内部就是由 process.stderr 实现的。(没错 process.stderr 也是可写流)。

⭐️输出

$ node .\process-写入流.js
你好!报错了啦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/153715.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JUNIT使用和注意、以及断言的介绍使用、SpringBoot Test测试类的使用、maven配置使用junit详细介绍

参考文章: https://www.cnblogs.com/zhukaile/p/14514238.html,https://blog.csdn.net/qq_36448800/article/details/126438339 一、什么是单元测试 在平时的开发当中,一个项目往往包含了大量的方法,可能有成千上万个。如何去保…

最小生成树

目录 带权图 带权图java代码实现 最小生成树 Kruskal算法 ​切分定理 Kruskal算法的java代码实现 Prim算法 Prim算法的java代码实现 总结 带权图 边上的权是附加的额外信息,可以代表不同公路的收费等你需要的信息。 带权图java代码实现 port java.io.File…

mysql---squid代理服务器

squid代理服务器 nginx也可以代理:反向代理--------负载均衡 squid:正向代理服务器。例:vpn squid :正向代理,缓存加速,acl过滤控制 代理的工作机制 1、代替客户端向网站请求数据,不需要访问代理的IP地址…

AI时代,如何防范诈骗的建议

以下是一些防范AI诈骗的方法: 认知教育:了解AI技术的应用和局限性,学习如何识别虚假信息和诈骗手段。保护个人信息:不要轻易泄露个人信息,尤其是身份证号码、银行卡号等敏感信息。谨慎对待陌生人的联系和信息&#xf…

前后端分离项目在Linux的部署方法、一台Nginx如何部署多个Web应用

需求场景:目前有三个前后端分离项目(vue+springboot),Linux服务器一台,nginx一个,比如服务器地址为www.xxxxxxx.com 我想通过80端口访问服务①(即访问www.xxxxxxx.com);通过81端口访问服务②(即www.xxxxxxx.com:81);通过82端口访问服务③(即www.xxxxxxx.com:82) ①部…

Java抽象类和接口

抽象类 看看这个代码 class Shape{public void draw(){System.out.println("画图形");} } class Cycle extends Shape{Overridepublic void draw() {System.out.println("⚪");} } class Rect extends Shape{Overridepublic void draw() {System.out.pri…

一个集成了AI和BI报表功能的新一代数据库管理系统神器--Chat2DB

世人皆知Navicate,无人识我Chat2DB 📖 简介 Chat2DB 是一款开源免费的多数据库客户端工具,支持多平台和主流数据库。 集成了AI的能力,能进行自然语言转SQL、SQL解释、SQL优化、SQL转换 ✨ 好处 1、AIGC和数据库客户端的联动&am…

[Vue 代码模板] Vue3 中使用 Tailwind CSS + NutUI 实现侧边工具栏切换主题

文章归档:https://www.yuque.com/u27599042/coding_star/vzkgy6gvcnpl3u2y 效果示例 配置 src 目录别名 https://www.yuque.com/u27599042/coding_star/ogu2bhefy1fvahfv 配置 Tailwind CSS https://www.yuque.com/u27599042/coding_star/yqzi9olphko9ity1 配置…

各地区农村及城镇恩格尔系数数据集(1978-2022年)

恩格尔系数是以德国统计学家恩格尔(Ernst Engel)的名字命名的一个经济指标,用来衡量食品支出占家庭总支出的比例。一般来说,恩格尔系数越低,表明家庭在食品上的支出占比越小,相对而言家庭的生活水平和经济条…

StringBuffer和StringBuilder的区别与联系

文章目录 区别一览StringBuffer如何实现多线程同步关键字(Synchronized)性能考虑使用场景 当不使用多线程的情况下,是否StringBuffer和StringBuilder的性能一样?性能差异原因实践中的选择结论 区别一览 StringBuffer 和 StringBu…

Unity Quaternion接口API的常用方法解析_unity基础开发教程

Quaternion接口的常用方法 Quaternion.Euler()Quaternion.Lerp()Quaternion.Inverse()Quaternion.RotateTowards() Quaternion在Unity中是一种非常重要的数据类型,用于表示3D空间中的旋转。Quaternion可以表示任何旋转,无论是在哪个轴上旋转多少度&#…

fablic 矩形多边形展示删除按钮

标注的矩形框或者多边形框展示删除按钮; 官网有一个例子 我原本想着按照他这个思路,很简单的; 可是当我在使用的过程中,遇到了一些问题,多变想不展示删除按钮;并且如果之前有矩形,无法渲然删除按…

拿走吧你,Fiddler模拟请求发送和修改响应数据

fiddler模拟伪造请求 方法一:打断点模拟HTTP请求 1、浏览器页面填好内容后(不要操作提交),打开fiddler,设置请求前断点,点击菜单fiddler,”Rules”\”Automatic Breakpoints”\”Before Requests” 2、在…

问题总结(持续更新)

Linux 1.虚拟机问题 打开虚拟机所在目录对 后缀 .vmx文件进行修改 vmcio.present"FALSE" 改为FALSE即可 2.因某些问题导致本来正常的虚拟机没有网络了 重新配置网络 vim /etc/sysconfig/network-scripts/ifcfg-enstab补全 service network restart 重启网络 Sentina…

海外推广必备|如何制定领英LinkedIn营销战略?

在网络上脱颖而出不是一件简单的事。不仅有比以往更多的平台、算法和内容类型,而且还有更多的企业在争夺注意力。据统计,每天有超过 270 万家公司在 LinkedIn 上发布信息。 策略很重要,尤其是在 LinkedIn 营销领域。下面将为你总结LinkedIn 营…

操作系统OS/进程与线程/线程

进程和线程 进程 进程实体(进程映像)由PCB、程序段和数据段组成,其中PCB是进程存在的唯一标志。 线程 线程最直接的理解就是“轻量级进程”,它是一个基本的CPU执行单元,包含CPU现场(状态),也是程序执行…

uniapp Android如何打开常用系统设置页面?

uniapp Android 如何打开常用系统设置页面? 在使用App过程时,有时候会对一些权限获取,比如打开蓝牙、打开通知栏通知等设置,我们如何快速跳转到需要的设置页面? 文章目录 uniapp Android 如何打开常用系统设置页面&…

500mA 线性锂电充电芯片 DP4054/DP4054H完全兼容替代TP4054

锂电池是一种新型的可充电电池,其具有体积小、重量轻、容量大耐用性强等特点,因此被广泛应用于手机、笔记本电脑、移动电源等电了设备上。 充电原理是指电池在充电过程中,用电流将锂离子从外部电源输入电池,使其形成 一个电荷差&…

【LeetCode刷题-滑动窗口】--424.替换后的最长重复字符

424.替换后的最长重复字符 方法:滑动窗口 右边界先移动找到一个满足题意的可以替换k个字符以后,所有字符都变成一样的当前看来最小的子串,直到右边界纳入一个字符以后,不能满足的时候停下然后考虑左边界右移,左边界只…

阿里5年经验之谈 —— 记录一次jmeter压测的过程!

在软件架构与中间件实验的最后,要求进行非功能测试,那得非压力测试莫属了。虽然之前学习秒杀项目的时候看视频里面用过jmeter,但没有自己实操过,趁着这次机会,使用一下。 QPS与TPS 1、TPS: Transactions …
最新文章