• Node.js Stream(流)


    Stream 是一个抽象接口,Node 中有很多对象实现了这个接口。例如,对http 服务器发起请求的request 对象就是一个 Stream,还有stdout(标准输出)。

    Node.js,Stream 有四种流类型:

    • Readable - 可读操作。

    • Writable - 可写操作。

    • Duplex - 可读可写操作.

    • Transform - 操作被写入数据,然后读出结果。

    所有的 Stream 对象都是 EventEmitter 的实例。常用的事件有:

    • data - 当有数据可读时触发。

    • end - 没有更多的数据可读时触发。

    • error - 在接收和写入过程中发生错误时触发。

    • finish - 所有数据已被写入到底层系统时触发。

    从流中读取文件

    首先要导入fs模块

    var fs = require("fs");

    创建可读流

    var readerStream = fs.createReadStream('input.txt');

    设置编码

    readerStream.setENcoding('UTF-8')

    处理流事件  data end error

    readerStream.on('data', function(chunk) {
       data += chunk;
    });
    
    readerStream.on('end',function(){
       console.log(data);
    });
    
    readerStream.on('error', function(err){
       console.log(err.stack);
    });


    写入流
    var witerStream = fs.createWriteStream('output.txt')
    witerStream.write(data,'UTF-8');
    writerStream.end();
    // 处理流事件 --> data, end, and error
    writerStream.on('finish', function() {
        console.log("写入完成。");
    });
    
    writerStream.on('error', function(err){
       console.log(err.stack);
    });
    管道流:从一个流中获取数据并将数据传递到另外一个流中
    // 创建一个可读流
    var readerStream = fs.createReadStream('input.txt');
    
    // 创建一个可写流
    var writerStream = fs.createWriteStream('output.txt');
    
    // 管道读写操作
    // 读取 input.txt 文件内容,并将内容写入到 output.txt 文件中
    readerStream.pipe(writerStream);
    链式流:多个管道操作
    压缩操作
    var fs = require("fs");
    var zlib = require('zlib');
    
    // 压缩 input.txt 文件为 input.txt.gz
    fs.createReadStream('input.txt')//读文件流
      .pipe(zlib.createGzip())//创建压缩
      .pipe(fs.createWriteStream('input.txt.gz'));//生成压缩文件 
    console.log("文件压缩完成。");
    //将压缩包解压
    var fs = require("fs");
    var zlib = require('zlib');
    
    // 解压 input.txt.gz 文件为 input.txt
    fs.createReadStream('input.txt.gz')//读压缩文件流
      .pipe(zlib.createGunzip())//创建解压
      .pipe(fs.createWriteStream('input.txt'));//生成解压文件
      
    console.log("文件解压完成。");
     

     

     
  • 相关阅读:
    react router实现多级嵌套路由默认跳转
    【转载】git 撤销,放弃本地修改
    js中RGB值与16进制颜色值进行互转
    【转载】whistle 使用实践
    程序员腰突经历分享(中)
    在非洲运营互联网系统-如何搞定支付?
    30岁后遇不治之症(上)
    递归把path字符串构造成递归数组
    使用go开发公众号之 关注公众号发送小程序卡片
    excel 函数经验答题
  • 原文地址:https://www.cnblogs.com/joer717/p/10515548.html
Copyright © 2020-2023  润新知