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

2018-10-30  本文已影响0人  EWL

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

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

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

看起来似乎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对象);就可以正确表达对应的内容了

·

上一篇下一篇

猜你喜欢

热点阅读