node.js(三 stream 管道流 模块化 函数)

Posted mufengchun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node.js(三 stream 管道流 模块化 函数)相关的知识,希望对你有一定的参考价值。

一、stream  

  stream是一个抽象的接口,node中有很多对象实现了这个接口。

  stream有四种流类型: Readable: 可读操作;  Writable: 可写操作;  Duplex: 可读可写操作;  Transform:  操作被写入数据,然后都出结果;

  所有的stream对象独有EventsEmitter的实例,常用的事件有:  

      data: 当有数据可读时触发;

      end:  没有更多的数据可读时触发;

      error:  在接收和写入过程中发生错误时触发;

      finish:  所有数据已被写入到底层系统时触发;

 

  1、从流中读取数据

   例如: var  fs = require(‘fs‘);

       var data = ‘‘;

      var readerStream = fs.createReadStream(‘demo.txt‘);    //创建可读的流

      //开始执行读取的事件

      readerStream.on(‘data‘,  function(chunk){

        data += chunk;

      })

      readerSteam.on(‘end‘,   function(){

        console.log(data)

      })

      readerStream.on(‘error‘,  function(err){

        console.log(err.stack)

      })

      

  2、写入流

    例如: 

      var fs = require(‘fs‘);

      var  data = ‘要写入的内容‘; 

      var writerStream = fs.creamWriteStream(‘demo.txt‘);       //写入demo.txt 文档内

      writeStream.write(‘data‘,  ‘UTF8‘);    //使用utf-8格式写入数据;

      writeStream.end();     //标记文件末尾;

      writeStream.on(‘finish‘,   function(){

         console.log(‘写入完成‘);

      })

      writeStream.on(‘error‘,  function(){

        console.log(err.stack);

      })

      

  3、管道流

  管道提供了一个从输出流到输入流的机制; 通常用于从一个流中回去数据,然后传递到另一个流中。

  例如; 

    var fs = require(‘fs‘);

    var readerStream = fs.creamReadStream(‘demo1.txt‘);

    var writeSteam = fs.creamWriteStream(‘demo2.text‘);

    readerStream.pip( writeStream);

 

  4、链式流

  链式是通过连接输出流到另一个流并创建多个流操作链的机制。链式流一般用于管道操作。

  例如: 

    var fs =  require(‘fs‘);

    var zlib = require(‘fs‘);

    var readerStream = fs.createReadStream(‘demo1.txt‘);

    readerStream.pip(zlib.createGzip())     //将文件进行压缩demo.txt.gz

          .pip(fs.createWriteStream(‘demo1.txt.gz‘))

    fs.createReadStream(‘demo1.txt.gz‘).pip(zlib.createGunzio())   //将压缩文件进行解压

          .pip(fs.createWriteStream(demo.txt))    

 

以上是关于node.js(三 stream 管道流 模块化 函数)的主要内容,如果未能解决你的问题,请参考以下文章

说Node.js做后端开发,stream有必要了解下

Node.js数据流(Stream接口)

Node.js 中的管道/流式处理 JavaScript 对象

Node.js的Buffer(缓冲区)和Stream

Node.js 中流操作实践

如何使用 node.js 顺序读取 csv 文件(使用流 API)