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 // 逐行读取数据

      

  • 相关阅读:
    支付宝移动支付开发详细教程服务端采用.net mvc webapi(C#)
    微信移动支付V3开发详细教程服务端采用.net mvc webapi(C#)
    CSS border-radius 圆角
    CSS hack大全&详解(什么是CSS hack)
    一小时搞定DIV+CSS布局-固定页面开度布局
    ASP.NET MVC3开发
    .net mvc页面UI之Jquery博客日历控件
    ASP.NET MVC3开发-数据库篇之CodeFisrt开发(一)
    ASP.NET MVC页面UI之联动下拉选择控件(省、市、县联动选择)
    Jquery文本框值改变事件(支持火狐、ie)
  • 原文地址:https://www.cnblogs.com/jiebba/p/12742882.html
Copyright © 2011-2022 走看看