zoukankan      html  css  js  c++  java
  • Node基础模块

      Node 基础模块 - Stream (流)

      Stream (流)是一个抽象的概念,在我们开发中会经常使用到(例如:fs 模块文件的读取和写入、http 请求的发送和相应 以及

    控制台上面打印日志)。

      首页 Stream (流) 这个模块继承 EventEmitter 模块,所以这里可以使用 EventEmitter 的事件事件订阅发布模式。

      个人理解,流类就是封装了一套对输入输出的数据的缓存 (利用 Buffer ,分配一定内存,分批读取或者写入) 并且进行操作。

      分类

      按照 Stream (流) 的用途可分为 :可写流 ( stream.Wiritable )、可读流( stream.Readable )、双工流 (stream.Duplex)、转换流 (stream.Transform)。

    我们只介绍下可写和可读流。

      可写流 (stream.Writable) 常见的有:

        fs 模块的可写流

        http 的响应

        客户端的请求

        子进程的 stdin

      它们都是实现了 stream.Writable 类的接口

      可读流 ( stream.Readable ) 常见的有:

        fs 的可读流

        http 的请求

        客户端的响应

      他们都实现了 stream.Readbale 类的接口

      可写流 ( stream.Writeable )

      主要事件句柄:

      close 、error、finish :基础句柄

      drain:当分配的内存满了 ( writer.write 返回 false ) 的时候,内存释放后再次可以使用的时候触发

      pipe:当可读流调用管道输入数据的时候( reader.pipe )。调用并返回可读流

      主要方法:

      write:写入数据

      end:结束写入流。

      setDefaultEncoding:设置编码

    /*
    * 创建一个可写流
    * fs 的写入流继承 stream.Writeable 类
    * */
    const writer = fs.createWriteStream('./2.txt');
    
    /*
    * 缓冲区满了,释放后重新可以写入事件
    * */
    writer.on('drain', () => {
        console.log('重新可以写入事件');
    })
    /*
    * 结束事件
    * */
    writer.on('finish', () => {
        console.log('所有写入完成');
    })
    /*
    * 发生错误事件
    * */
    writer.on('error', () => {
        console.log('所有写入完成');
    })
    /*
    * 管道写入事件
    * 当可读流调用了 pipe(writer) 时候触发事件,并传入 可读流对象
    * 当可读流调用了 unpipe(writer) 时候触发事件,并传入 可读流对象
    * */
    writer.on('pipe', () => {
        console.log('所有写入完成');
    })
    writer.on('unpipe', () => {
        console.log('所有写入完成');
    })
    
    /*
    * 设置编码
    * */
    writer.setDefaultEncoding('utf8')
    /*
    * 写入数据到流
    * */
    writer.write(',test','utf8',()=>{})
    /*
    * 写入完毕,写入目的文件
    * */
    writer.end('end!')
    

      

      可读流  ( stream.Readable )

      可读流分为两种模式:暂停模式和流动模式

      流动模式可以自动的读取数据到目标。切换到流动模式可以通过:data 事件句柄触发、调用 resume 方法、可以通过管道传输

      暂停模式就是需要手动读取,需要调用 read。切换到暂停模式可以通过:调用 pause 方法、移除管道输入目标

      常见的事件句柄:

      data :用于接受数据,触发流动模式

      end/error:结束/错误

      常见的方法:

      read:暂停模式读取数据

      pipe:以管道形式向目标传输数据

      se'tEncodding: 设置编码

    const writer = fs.createReadStream('./2.txt');
    writer.setEncoding('utf8')
    writer.on('data',(res)=>{
        console.log(res)
    })
    

      

      

    readline // 逐行读取数据

      

  • 相关阅读:
    hdu5728 PowMod
    CF1156E Special Segments of Permutation
    CF1182E Product Oriented Recurrence
    CF1082E Increasing Frequency
    CF623B Array GCD
    CF1168B Good Triple
    CF1175E Minimal Segment Cover
    php 正则
    windows 下安装composer
    windows apache "The requested operation has failed" 启动失败
  • 原文地址:https://www.cnblogs.com/jiebba/p/12742882.html
Copyright © 2011-2022 走看看