zoukankan      html  css  js  c++  java
  • nodeks —— fs模块 —— 从流中 读取和写入数据

    Fs流读取和写入数据

    使用文件流来读取大文件不会卡顿

    1, 从流中读取数据

    var fs = require("fs");

    var data = '';

    var count = 0;

     

    // 创建可读流

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

     

    // 设置编码为 utf8。

    readerStream.setEncoding('UTF8');

     

    // 处理流事件 --> data, end, and error

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

       data += chunk;

       count++

    });

     

    readerStream.on('end',function(){

       console.log(data);

       console.log(count);      //count:读取次数

    });

     

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

       console.log(err.stack);

    });

     

    console.log("程序执行完毕");

     

     

    2, 写入流

    var fs = require("fs");

    var data = ' ----- 数据库数据 ----- ';

     

    // 创建一个可以写入的流,写入到文件 t.txt 中

    var writerStream = fs.createWriteStream('t.txt');

     

    // 使用 utf8 编码写入数据

    writerStream.write(data,'UTF8');

     

    // 标记文件末尾

    writerStream.end();

     

    // 处理流事件 --> data, end, and error

    writerStream.on('finish', function() {

        console.log("写入完成。");

    });

     

    writerStream.on('error', function(err){

       console.log(err.stack);

    });

     

    console.log("程序执行完毕");

    3, 管道流

    var fs = require('fs')

    var readerStream = fs.createReadStream('t.txt')

     

    // 1,覆盖原来内容

    // var writerStream = fs.createWriteStream('pipe.txt')

     

    // 2.原内容后追加

    var writerStream = fs.createWriteStream('pipe.txt',{ 'flags': 'a' })

     

    readerStream.pipe(writerStream)

    console.log('管道输送完成')

     

     

    4, 链式流

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

    接下来我们就是用管道和链式来压缩和解压文件。

    创建 compress.js 文件, 代码如下:

    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("文件压缩完成。");

    代码执行结果如下:

    $ node compress.js

    文件压缩完成。

    执行完以上操作后,我们可以看到当前目录下生成了 input.txt 的压缩文件 input.txt.gz。

    接下来,让我们来解压该文件,创建 decompress.js 文件,代码如下:

    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("文件解压完成。");

    代码执行结果如下:

    $ node decompress.js

    文件解压完成。

  • 相关阅读:
    set, unordered_set模板类
    C/C++ Bug记录
    win10远程连接
    C/C++缓冲区刷新问题
    hihocoder1711 评论框排版[并查集+set]
    makefile
    Virtual Table
    粤语
    xilinx SDK开发 GPIO使用API总结
    基于zynq 7020的串口UART中断实验
  • 原文地址:https://www.cnblogs.com/500m/p/10806206.html
Copyright © 2011-2022 走看看