美文网首页
2018-10-08NodeJs的笔记(2)

2018-10-08NodeJs的笔记(2)

作者: EWL | 来源:发表于2018-10-30 15:39 被阅读0次

    主要记录一下此次对于Buffer的常用静态方法和常用实例方法,为后续的实战铺垫

    setImmediate与process.nextTick, setTimeout的执行顺序 (续上一次笔记的process部分)

    结论:process.nextTick 早于 setTimeout 早于setImmediate

    • nextTick表示把自己放在当前事件队列的最后一个
    • setImmediate表示把自己放在当前事件队列的下一个队列的队首
    • timeout则放在二者中间


      image.png

    看起来似乎nextTick和Immediate是一样的作用,但实际上大部分时候都是使用Immediate,这是官方后来放上来的一个优化版本,其次呢,process在当前执行队列的队尾执行,如果它没有执行,那么下一个队列就不会开始执行,(nodejs会一直检查事件队列),最后,如果process.nextTick里嵌套了另一个process.nextTick,被嵌套进去的那个nextTick会再被插进队尾,如果后续插入的一些东西出现了循环调用或者长时间的调用,那么后面可能根本没有机会去执行。

    buffer的一些特性:

    1. 用于处理二进制数据流
    2. 实例类似于整数数组,大小固定
    3. C++代码在v8堆外分配物理内存

    使用Buffer.alloc(length, value)创建的数组是不能再改动的, 且Buffer在创建时大小就已经被确定,且value如果不传入数据的话,就默认给数组都填充为0(0x0,十六进制的0)

    常用的Buffer的静态方法:

    1. Buffer.byteLength
    2. Buffer.isBuffer()(用于判断被监测的变量是否是Buffer类型)
    3. Buffer.concat()(用于拼接Buffer,并且不传入多个变量,而是传入一个Buffer对象组成的数组)

    常见的实例方法以及属性:(以下的buf指代Buffer实例)

    buf.length
    buf.toString()
    buf.fill()
    buf.equals()
    buf.indexOf()
    buf.copy()

    1. Buffer对象的长度(此处的长度并非是Buffer对象里面字符的长度是多少就显示多少位,而是我们在创建Buffer对象的时候申请了多少位,就显示多少位)
    fig-1 fig-2 fig-3
    1. buf.toString()是将Buffer对象转为字符串,并且是可以传入参数的,如base64这样的编码方式


      fig-4
    2. buf.fill() 在初始化的时候将Buffer对象填入初始值,可以给fill方法传入参数,从x开始到y,且x是从1开始数的


      fig-5
    3. equals主要是用于判断两个Buffer对象的内容是否一致,而非判断两个命名不同而内存位置和内容一致的Buffer对象

    4. 由于一开始学习的时候就得知Buffer实际上是一种TypedArray,所以对于此种类数组的对象,它的一些index方法可以参照数组学习,此处不做赘述

    5. 关于copy,主要记录一下它的使用方法,

    buffer.copy(target, targetStart, sourceStart, sourceEnd);
    
    Parameter Description
    target Required. The array of buffers to concat
    targetStart Optional. A number specifying where to begin copying to. Default 0
    sourceStart Optional. A number specifying where to begin copying from. Default 0
    sourceEnd Optional. A number specifying where to stop copying from. Default end of buffer

    对于NodeJS里中文乱码的解决方案(后续还会有补充,这只是当前学习到的一种)

    var stringDecoder = require('string_decoder').StringDecoder;
    decoder = new StringDecoder('utf-8');
    

    使用decoder.write(//Buffer对象);就可以正确表达对应的内容了

    ·

    相关文章

      网友评论

          本文标题:2018-10-08NodeJs的笔记(2)

          本文链接:https://www.haomeiwen.com/subject/jdijaftx.html