zoukankan      html  css  js  c++  java
  • Node.js Stream(流)--文件操作

    Node.js中的Stream 有四种流类型:

    • Readable - 可读操作。

    • Writable - 可写操作。

    • Duplex - 可读可写操作.

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

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

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

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

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

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

    先创建一个test.txt

    cyy在学习node.js

    然后是main.js

    var fs=require("fs");
    var mydata="";
    
    //创建可读流
    var stream=fs.createReadStream("test.txt");
    //设置编码
    stream.setEncoding("utf8");
    
    
    stream.on("data",function(data){
        mydata+= data;
    })
    stream.on("end",function(){
        console.log(mydata);
    })
    stream.on("error",function(err){
        console.log(err.stack);
    })
    
    console.log("读取文件结束");

    打印结果:

    写入流(写入文件)

    mian.js

    var fs=require("fs");
    var mydata="这是我要写入文件的内容";
    
    //创建可读流
    var stream=fs.createWriteStream("test.txt");
    //设置编码
    stream.write(mydata,"utf8");
    
    stream.end();//标记文件末尾
    stream.on("finish",function(){
        console.log("写入结束");
    })
    stream.on("error",function(err){
        console.log(err.stack);
    })
    
    console.log("操作结束");

    然后查看刚才的test.txt

    这是我要写入文件的内容

    管道流(文件内容复制)

    管道提供了一个输出流到输入流的机制。通常我们用于从一个流中获取数据并将数据传递到另外一个流中。

    首先test.txt

    这是在test.txt中的内容

    然后test2.txt为空

    main.js

    var fs=require("fs");
    var mydata="这是我要写入文件的内容";
    
    //创建可读流
    var stream=fs.createReadStream("test.txt");
    //创建可写流
    var stream2=fs.createWriteStream("test2.txt");
    
    stream.pipe(stream2);
    
    console.log("复制结束");

    此时查看原本为空的test2.txt

    这是在test.txt中的内容

    链式流(可用于解压缩文件)

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

    首先压缩文件操作:

    var fs=require("fs");
    var zlib=require("zlib");
    
    //压缩
    fs.createReadStream("test.txt")
        .pipe(zlib.createGzip())
        .pipe(fs.createWriteStream("test.txt.gz"));
    
    console.log("压缩结束");

    然后是解压操作:

    var fs=require("fs");
    var zlib=require("zlib");
    
    //解压
    fs.createReadStream("test.txt.gz")
        .pipe(zlib.createGunzip())
        .pipe(fs.createWriteStream("test3.txt"));
    
    console.log("解压结束");

  • 相关阅读:
    CSDN博客 专用备份工具
    discuz 7.0 uc 同步登录方法
    delphi 子窗体最大化
    OO系统分析员之路用例分析系列(8)如何编写一份完整的UML需求规格说明书[整理重发]
    delphi 抓取网页内容的程序
    delphi messagebox 使用技巧
    windows mobile下实现程序安装和卸载
    纯真IP库算法
    delphi idhttp 使用方法
    最近评论回复汇总
  • 原文地址:https://www.cnblogs.com/chenyingying0/p/12455281.html
Copyright © 2011-2022 走看看