缓冲作为存在于全局对象上,无需引入模块即可使用,你绝对不可以忽略它。
可以理解缓冲区是在内存中开辟的一片区域,用于存放二进制数据.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缓冲用法解读