zoukankan      html  css  js  c++  java
  • nodejs的某些api~(一)node的流1

    根据心情整理一些node的api~

    今天第一篇,node的流;node的流比较重要,node的流存在于node的各个模块,包括输入输出流,stdin,stout。fs读取流,zlib流,crypto流,tcp套接字等等,node很重要的net,http模块都用到了流的概念,留到以后再说。还有gulp的流也是来源于node的流。express的中间件,也被应用于各大框架……


    nodejs流,所有流都是EventEmitter的实例,流包括了Readable,writable,Duplex,Transform流;这是流的分类。

    Stream,数据出自一个readable流,在就绪接受之前,readable流不会发生数据。
    readable流有流动模式和暂停模式(默认)两种模式;处于暂停模式时,必须明确调用stream.read()取出若干数据块。

    如果没有绑定data事件处理,也没有pipe()目标,处于流动模式,数据会流失
     ·some ways change to流动模式

    1,添加一个data事件监听
    2,调用resume()开启数据流
    3,调用pipe()将数据发送到一个writable
    some ways  change to暂停模式
    1,如果没有导流目标,调用pasuse()
    2,如果有导流弥补,移出所有data监听器,调用unpipe()移除所有导流目标
    tips:移出data监听器并不会暂停流,当有导流目标时,调用pause()并不能保证流在哪些目标排空并请求更多数据时维持暂停状态

    一些可读流的例子:

    客户端上的http响应
    服务器上的http请求
    fs读取流
    zlib流
    crypto流
    tcp嵌套字
    子进程的stdout和stderr

    流的事件:

    //readable事件
    当一个数据块可以从流中被读出,会触发一个readable事件

    var readable=getReadableStreamSomehow();
        readable.on('readable',function(){
        //有数据可读
    })

    //data事件

    var readable=getReadableStreamSomehow();
        readable.on('data',function(chunk){
          console.log('得到了%d字节的数据',chunk.length);
      })

    后面node好多模块都可以监听data来接收事件,比如http的server,也可以用pipe()传数据给客户端。

    //end事件
    在没有更多数据能提供时被触发;在数据被完全消费之前不会被触发,
    // close事件底层数据源被关闭时触发,不是所有流都会触发
    //error事件数据接收错误触发
    //readable.read([size])

    read()从内部缓存区中拉取返回若干数据,没有更多数据时会返回null,指定size会返回相当字节的数据
    仅在暂停模式时被调用

    var readable=getReadableStreamSomehow();
    readable.setEncoding('utf8')
    readable.on('readable',function(){
    	var chunk;
    	while(null!==(chunk=readable.read())){
    		console.log('得到了%d字节的数据',chunk.length);
    	}
    })
    

      

    //readable.setEncoding(encoding)
    //readable.resume()返回this可以让可读流继续触发data事件
    //readable.pause()让处于流动模式的流停止触发data事件,切换到非流动模式,并让都需可用数据留在内部缓冲区
    //readable.pipe(destination,[options])写入数据的目标;导流选项options,end在读取者结束时结束写入者,缺省为true
    =>可以从可读流中拉取所有数据,并写入到所提供的目标,该方法能自动控制流量以避免目标被快速读取的可读流淹没

    var readable=getReadableStreamSomehow();
    var writable=fs.createWriteStream('files.txt');
    readable.pipe(writable);//返回目标流

    //readable.unpipe()就不说了-0-前面提到了。

  • 相关阅读:
    关于SimpleDateFormat安全的时间格式化线程安全问题
    JAVA多线程和并发基础面试问答
    探秘Java中的String、StringBuilder以及StringBuffer
    Java开发岗位面试题归类
    Java并发编程:阻塞队列
    Shell基本概述
    Ansible--06 ansible roles
    Ansible --05 ansible jinja2
    Ansible--04 ansible 流程控制
    Ansible--03 ansible 变量
  • 原文地址:https://www.cnblogs.com/dh-dh/p/5065098.html
Copyright © 2011-2022 走看看