zoukankan      html  css  js  c++  java
  • 珠峰培训node正式课--【笔记】|全局对象 | process | util | fs | stream 流

    全局对象:

    console  ;

     __filename     ;  

    __dirname     ;  

    setTimeOut     ;  

    setImmediate(把参数函数放在下一个环节执行)

    process对象

        cwd   //当前工作目录   console.log(process.cwd());

      chdir   //修改当前工作目录   process.chdir('..') ;  切换到上一层目录 

      memoryUsage   //内存使用量    process.memoryUsage();    {rss:常驻内存,heapTotal:堆的总内存,heapUsed:堆得已使用内存}

      nextTick    //放在当前任务的末尾

    ================================

    util

      1、inherits   //原型继承,(ChildFun只继承ParentFun原型上的属性与方法)  util.inherits(ChildFun,ParentFun);  var child  = new ChildFun()

      2、inspect

    //关于枚举隐藏与强制显示
    var util = required(‘util’);
    var obj = new Object();
    obj.name = 'liujinyu'
    Object.defineProperty(obj,'age',{
      value:27,
      configurable:true, //可配置 可删除
      writable:true, //值可以改变
      enumerable:false //不可枚举
    })
    console.log(util.inspect(obj),{
      showHidden:true //{name:'liujinyu',[age]:27}
    })

       3、isArray ;  

      4、isRegExp;

      5、isDate;

    fs

      var content = fs.readFileSync('../file.txt',{encoding:'utf8'})  //同步

      fs.readFile('../file.txt',{encoding:'uft8'},(err,data)=>{console.log(data)})  //异步 【!所有异步要晚于同步,所有异步放在下一个清单】

    ======================================================

    【流】

      流的概念:流是一组【有序】的,有【起点】和【终点】的【字节数据传输】手段;

           不关心文件整体内容,文件多大,只关心是否读到、以及读到后的操作处理

           流是一个【抽象接口】,被node中很多对象所实现,比如对一个http服务器的请求对象request是一个流,stdout也是流。

      stream.Readable可读流    

      fs.createReadStream('../file.txt',[opations]);  //opactions: flags对文件何种操作,默认‘r’, encoding , start 开始读取字节读索引位置,

                           //end 结束索引, highWaterMark 最高水位线,却省64kb

     1 var fs = require('fs');
     2 
     3 // 创建之后的流在准备好【接收】之前不会开始【发射】数据
     4 var rs = fs.createReadStream('data/account_0.data',{//创建流
     5     flage:'r',//打开文件之后想干什么  r只读操作   w写操作
     6     // encoding:'utf8'  //默认是buffer
     7     start:10,//读取的字节索引的开始位置
     8     end:30,//读取的字节索引的开始位置
     9     highWaterMark:10//最高水位线,却省默认64kb,一次取多少1字节
    10 })
    11 
    12 //可读流方法
    13 rs.setEncoding('utf8');//可以在创建流之后制定编码
    14 rs.pause();//通知对象 暂停 触发data事件
    15 rs.resume();//通知对象 恢复 触发data事件
    16 // rs.pipe();//设置【管道】,将可读流内容导入参数指定的【可写流】
    17 
    18 // 流是EventEmitter的子类 
    19 // 下面是可读流触发的事件 用on来绑定 触发事件有 dataenderror
    20 rs.on('data',function(resData){//绑定一个“data”事件监听器,
    21     console.log(resData)  //会将流切换到“流动模式”,数据被尽可能快读出
    22 })
    23 rs.on('end',function(){//读完后触发
    24     console.log('读完了')
    25 })
    26 rs.on('error',function(err){//当数据接收错误时触发
    27     console.log(err);
    28 })

       stream.writeStream可写流    

    var fs = require('fs');
    //在fs模块中 用createWriteStream创建一个将流数据写入文件中的 WriteStream对象
    
    var ws = fs.createWriteStream('data/my.data',{
        flags:'a',//默认w r=read w=write a=append
        encoding:'utf8',
        // start:0,// 从第几个字节开始写入
        highWaterMark:5 //却省16kb 设置缓存区大小 最高水位线设5字节 
        // 可以说是控制写入速度  大口大口喂
    })
    
    //可写流的方法 
    ws.write('1');//write写入缓存区
    var flag = ws.write('23456');//flag,是否满足缓存区 highWaterMark 设置的大小
    console.log(flag)
    
    ws.on('drain',function(){
        console.log('drain')
    })
    
    // 结束写入数据时触发。迫使缓存区中数据立即写入目标对象,调用后不能再写入
    ws.end('man');  //向流入写入数据

     【练习】利用流,做一个copy方法,复制文件 copy(file1,file2) copy:file1=>file2

      【pipe】

    var fs = require('fs');
    //在fs模块中 用createWriteStream创建一个将流数据写入文件中的 WriteStream对象
    
    function copy(file1,file2){
        var rs = fs.createReadStream(file1);
        var ws = fs.createWriteStream(file2);
    
        rs.on('data',function(d){
            var flag = ws.write(d);
            if(!flag){//当写不进去了
                ws.pause();//暂停写入
            }
        })
        ws.on('drain',function(){//写入流 监听到写完
            ws.resume(); //恢复写入
        })
        rs.on('end',function(){
            ws.end();//当读完的时候也要关闭写入文件
        })
    }
    // copy('my.js','my1.js')
    
    // ------ 用 pipe 重写 copy (pipe的源码上面的function cope 一样)--------
    // 将数据的【制留量】限制到一个可接受的水平,以使得不同速度的来源和目标不会【淹没】可用内存
    function copy_pipe(file1,file2){
        var rs = fs.createReadStream(file1);
        var ws = fs.createWriteStream(file2);
        rs.pipe(ws);
    }
    copy_pipe('my.js','my1.js')

    ============================================

  • 相关阅读:
    JDK9对集合添加的优化
    IO异常的处理
    动态创建分页 LINQ+EF
    TypeError at /admin/booktest/book_infor/add/ __str__ returned non-string (type bytes)
    TypeError at /admin/booktest/bookinfo/ expected string or buffer
    linux下的 pycharm 2016.3d的注册码
    解决ubantu下的pycharm输入中文的问题
    .pip的时候出现Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None))…………
    Day06
    Day05
  • 原文地址:https://www.cnblogs.com/liujinyu/p/7341707.html
Copyright © 2011-2022 走看看