• 【第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('完成写入数据');
    
    • 1
    • 2
    • 3
    • 4

    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);
    })
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    ⭐️动图演示

    在这里插入图片描述

    🐯案例: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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    process.stdout.write('你好!');
    process.stderr.write('报错了啦')
    
    • 1
    • 2

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

    ⭐️输出

    $ node .\process-写入流.js
    你好!报错了啦
    
    • 1
    • 2
  • 相关阅读:
    [自制操作系统] 第09回 加载内核
    解决/usr/bin/env: ‘python\r’: No such file or directory
    乐观锁的实现
    <version>3.1.2.RELEASE</version>idea建要给springboot项目,3.1.2.RELEASE是红色的
    git可以pull到代码,push时提示没有权限。解决办法:git生成ssh密钥(详细步骤)
    卷妹的成长日记之javaweb day14
    LeetCode题练习与总结:设计推特--355
    [NOIP2003 普及组] 乒乓球
    Go语言中的defer关键字
    【计算机组成原理】定点加减法运算
  • 原文地址:https://blog.csdn.net/No_Name_Cao_Ni_Mei/article/details/134447524