节点。js缓冲用法解读

  


  

  

缓冲作为存在于全局对象上,无需引入模块即可使用,你绝对不可以忽略它。
  

  

可以理解缓冲区是在内存中开辟的一片区域,用于存放二进制数据.Buffer所开辟的是堆外内存。
  

  


  

  

<>强流
  

  

怎么理解流呢?流是数据的集合(与数据,字符串类似),但是流的数据不能一次性获取到,数据也不会全部加载到内存中,因此流非常适合大数据处理以及断断续续返回块的外部源。流的生产者与消费者之间的速度通常是不一致的,因此需要缓冲来暂存一些数据.buffer大小通过highWaterMark参数指定,默认情况下是16 kb。
  

  

<强>存储需要占用大量内存的数据
  

  

缓冲对象占用的内存空间是不计算在节点。js进程内存空间限制上的,所以可以用来存储大对象,但是对象的大小还是有限制的。一般情况下32位系统大约是1 g, 64位系统大约是2 g。

  


  

  

除了流自动隐式创建缓冲之外,也可以手动创建缓冲区,方式如下:
  

  

<强>缓冲区中存储的数据已确定
  

  

Buffer.from (obj),//obj支持的类型字符串缓冲区,arrayBuffer数组或数组类对象
  

  

注意:Buffer.from不支持传入数字,如下所示:
  

        Buffer.from (1234);      buffer.js: 208   把新的errors.TypeError (   ^      TypeError [ERR_INVALID_ARG_TYPE]:“价值”的论点不能类型的号码。收到了型号   Function.from (buffer.js 208:11):   …      之前      

若要传入数字可以采用传入数组的方式:
  

        const buf=Buffer.from ([1、2、3、4]);   console.log (buf);//& lt;缓冲区01 02年03 04祝辞      

但是这种方式存在一个问题,当存入不同的数值的时候缓冲区中记录的二进制数据会相同,如下所示:
  

        const buf2=Buffer.from([1] 127年);   console.log (buf2);//& lt;缓冲区7 f ff>      const buf3=Buffer.from ((127、255));   console.log (buf3);//& lt;缓冲区7 f ff>      console.log (buf3.equals (buf2));//正确的      之前      

当要记录的一组数全部落在0到255 (readUInt8来读取)这个范围,或者全部落在-128年到127年(readInt8来读取)这个范围那么就没有问题,否则的话就强烈不推荐使用Buffer.from来保存一组数,因为不同的数字读取时应该调用不同的方法。
  

  


  

  

Buffer.alloc、Buffer.allocUnsafe缓冲区。allocUnsafeSlow
  

  

缓冲区。alloc会用0值填充已分配的内存,所以相比后两者速度上要慢,但是也较为安全。当然也可以通过——zero-fill-buffers国旗使allocUnsafe, allocUnsafeSlow在分配完内存后也进行0值填充。
  

        节点——zero-fill-buffers index.js      

当分配的空间小于4 kb的时候,allocUnsafe会直接从之前预分配的缓冲区里面切空间,因此速度比allocUnsafeSlow要快,当大于等于4 kb的时候二者速度相差无异。
  

     //分配空间等于4 kb   函数createBuffer (fn、大小){   控制台。时间(buf - ' + fn);   (var=0;我& lt;100000;我+ +){   缓冲(fn)(大小);   }   控制台。timeEnd (buf - ' + fn);   }   createBuffer (alloc, 4096);   createBuffer (allocUnsafe, 4096);   createBuffer (allocUnsafeSlow, 4096);//输出   女士buf-alloc: 294.002   女士buf-allocUnsafe: 224.072   女士buf-allocUnsafeSlow: 209.22      之前            函数createBuffer (fn、大小){   控制台。时间(buf - ' + fn);   (var=0;我& lt;100000;我+ +){   缓冲(fn)(大小);   }   控制台。timeEnd (buf - ' + fn);   }   createBuffer (alloc, 4095);   createBuffer (allocUnsafe, 4095);   createBuffer (allocUnsafeSlow, 4095);//输出   女士buf-alloc: 296.965   女士buf-allocUnsafe: 135.877   女士buf-allocUnsafeSlow: 205.225   之前      

需要谨记一点:新缓冲区(xxxx)方式已经不推荐使用了

  


  

  

<>强缓冲转字符串
  

        const buf=Buffer.from(测试);   console.log (buf.toString (use utf8));//测试   console.log(缓冲区。toString (use utf8, 0, 2));//te

节点。js缓冲用法解读