目录
  • 一、Node的数据流(stream)
    • 1、处理缓存的方式
    • 2、四种类型的流
    • 3、zlib模块:用于文件的压缩与解压缩
      • (1)压缩方法:zlib.createGzip()
      • (2)解压缩方法:zlib.createGunzip()
  • 总结

    一、Node的数据流(stream)

    1、处理缓存的方式

    (1)一次性全部读取,然后再进行处理。缺点是大文件处理非常耗时,优点是过程直观

    (2)读取一块处理一块.优点是提高程序的性能

    2、四种类型的流

    Readable - 其是用于读操作

    Writable - 用在写操作

    Duplex - 其可以用于读取和写入操作

    Transform - 输出基于输入的地方进行计算的一种双相流

    每种流都是事件触发器,当某个流被调用时,就会触发,抛出一个事件:

    'data'事件:表示流中有数据可以读取

    'end'事件:表示流中没有数据可以读取

    'error'事件:读写数据错误时触发

    'finish'事件:数据刷新到底层系统时触发

    const fs = require('fs');
    let str_data = '';
    //创建读数据的流
    let readerStream = fs.createReadStream('./test.txt');
    //设置流的编码格式
    readerStream.setEncoding('utf8');
    //给流绑定事件
    readerStream.on('data',function (chunk) {
        str_data += chunk
    })
    readerStream.on('end',function (){
        console.log("读取的数据是:",str_data)
    })
    readerStream.on('error',function (err){
        console.log(err.stack)
    })
    console.log('-----End-----')
    //    读取的数据是: 离离原上草,
    //    一岁一枯荣;
    //    野火烧不尽,
    //    春风吹又生。
    const fs = require('fs');
    //创建一个读数据的流
    let readerStream = fs.createReadStream('./test.txt')
    //创建一个写数据的流
    let writerStream = fs.createWriteStream('./out.txt')
    //创建管道流
    readerStream.pipe(writerStream)
    console.log('----End----')
    //可以完成复制,将test文件中的内容复制到out文件中

    3、zlib模块:用于文件的压缩与解压缩

    (1)压缩方法:zlib.createGzip()

    const fs = require('fs');
    const zlib = require('zlib');
    //创建一个读数据的流
    let readerStream = fs.createReadStream('./test.txt')
                         .pipe(zlib.createGzip())
                         .pipe(fs.createWriteStream('./text.zip'))
    readerStream.on('error',function (err) {
        console.log(err.stack)
    })
    console.log('----End----')
    //创建一个名为text.zip的压缩包

    (2)解压缩方法:zlib.createGunzip()

    const fs = require('fs');
    const zlib = require('zlib');
    fs.createReadStream('./test.zip')
      .pipe(zlib.createGunzip())
      .pipe(fs.createWriteStream('./db.txt'))
    //解压名为test.zip的压缩包,并将其中的内容复制到db.txt当中

    总结

    本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!