zoukankan      html  css  js  c++  java
  • Stream文件流

    一:由于Buffer缓存区最大缓存内存为1GB,因此对于读写大文件将无法进行工作,为此,node.js提供了Stream文件流。

      (1):Stream模块提供文件流的操作,Node.js中还有很多对象实现了这个接口。例如,对HTTP服务器发起请求的request对象就是一个 Stream,还有stdout(标准输出)等。

      (2):Stream有四种类型:Readable(可读文件流),Writeable(可写文件流),Duplex:可读可写文件流,Transform:操作被写入数据,然后读出结果(变换流)。

      (3):在Node.js中的I/O是异步的,因此对磁盘和网络的读/写需要通过回调函数来读取数据,而回调函数需要由事件来触发,所有的Stream对象都市EventEmitter(事件触发器)的实列,常用的事件有:

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

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

        error:在接受或者写入过程中发生错误时触发。

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

      (4):可读流.js

    /*
    可读流:
    可以让用户在源文件中分块读取文件中的数据,然后再从可读流中读取数据。
    fs.createReadStream(path,[,options]);
    options参数有这些:
    flags:对文件进行何种操作.
    encoding:指定编码,默认为null,使用fs.setEncoding('utf-8');
    start:从start开始读.
    end:读取文件到end为止.
    */
    var fs = require('fs');
    var tatal_data = '';
    var readStream = fs.createReadStream('a.txt',encoding = '',flags = 'r',start = 'start',end = 'end');
    readStream.setEncoding('utf-8');
    //注意流是由事件进行驱动的
    readStream.on('data',function(data_block){
        tatal_data = tatal_data+data_block;
    });
    readStream.on('end',function(){
        console.log(tatal_data);
    });
    readStream.on('error',function(err){
        console.log(err.stack);
    });
    输出:

    D:Program Files odejschapter>node 可读流.js
    You often to do the error thing��yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy //??:在文件夹中是问好,但是书中没有见到怎么处理.
    u
    o
    p

      5:使用可读流将其数据读出在使用可写流将数据存入到一个文件中.

      

    var fs = require('fs');
    var readStream = fs.createReadStream('a.txt');
    var writeStream = fs.createWriteStream('D:/Program Files/nodejs/chapter/output.txt');
    readStream.setEncoding('utf-8');
    readStream.on('data',function(data_block) {
        writeStream.write(data_block); //文件流写入
    });
    readStream.on('error',function(err){
        console.log(err.stack);
    });
    readStream.on('end',function(){
        //将数据全部写入后便触发end事件,将其文件关闭.
        writeStream.end();
    });
    writeStream.on('error',function(write_err){
        console.log(write_err.stack);
    });

      6:使用pipe()处理大文件:

    /*
    pipe()翻译成管子.
    在node.js中就通过这条管子,连接写入流和可读流.
    */
    var fs = require('fs');
    //源文件路径
    var srcpath = 'D:/Program Files/nodejs/chapter/a.txt';
    var distpath ='D:/Program Files/nodejs/chapter/out.txt';
    var readStream = fs.createReadStream(srcpath);
    var writeStream = fs.createWriteStream(distpath);
    //可以通过使用可读流的函数pipe()接入到可写流中
    if(readStream.pipe(writeStream))
    {
        console.log('文件复制成功了');
    }
    else
    {
        console.log('文件复制失败了');
    }
    输出:

    D:Program Files odejschapter>node pipe处理大文件.js
    文件复制成功了

     

    7:一定要熟悉回调函数的执行机制,和事件触发机制.

      on这个函数是用来绑定事件的,在jQuery.js中也大量使用到和off()取消绑定事件.

  • 相关阅读:
    input 放大镜
    记住密码弹出事件
    thinkphp修改及编写标签库,编辑器的使用
    thinkphp 配合mongodb
    缓存技术
    php面试题目
    pdo 整套类的封装,保存修改查询
    mongodb 的备份恢复导入与导出
    mongodb 分组查询
    smarty 模板的入门使用
  • 原文地址:https://www.cnblogs.com/1314bjwg/p/12507971.html
Copyright © 2011-2022 走看看