当前位置: 首页 > news >正文

【第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.lryc.cn/news/232649.html

相关文章:

  • 【kerberos】使用 curl 访问受 Kerberos HTTP SPNEGO 保护的 URL
  • 基于SSM的智慧养老平台设计与实现
  • 图像生成colab集合
  • SpringBoot整合Quartz示例
  • 物联网AI MicroPython学习之语法 I2C总线
  • RocketMQ的适用场景有哪些?
  • ubuntu启动转圈,无法进入登录界面
  • MATLAB 机械臂逆运动学进行轨迹控制建模
  • 【计算机组成原理】定点加法、减法运算
  • scp 跨服务器传输命令,把一个服务器上的文件复制传到当前服务器目录下
  • 【python基础】用户输入和while循环详解
  • k8s-部署Redis-cluster(TLS)
  • 计算机毕业设计选题推荐-幼儿园管理微信小程序/安卓APP-项目实战
  • ElasticStack日志分析平台-ES 集群、Kibana与Kafka
  • 微机原理_10
  • (SpringBoot)第八章:SpringMVC程序开发
  • openssl + 3DES开发实例(linux)
  • 遵循开源软件安全路线图
  • 294_C++_
  • 【计算机网络笔记】网络地址转换(NAT)
  • 【flink理论】动态表:关系查询处理流的思路:连续查询、状态维护;表转换为流需要编码编码
  • 2023年09月 Python(六级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • Ubuntu16.04上安装Docker
  • FSOD论文阅读 - 基于卷积和注意力机制的小样本目标检测
  • Windows系统中搭建docker (ubuntu,Docker-desktop)
  • 使用记录-MongoDB
  • 用归并排序算法merge_sort( )求解 逆序对的数量 降低时间复杂度为 nlogn
  • 大功率电源芯片WD5030L
  • Spring Boot使用EhCache完成一个缓存集群
  • yolov5模型代码怎么修改