Node中的Buffer缓冲器

buffer缓冲器

Buffer是一个和数组类似的对象,不同的是Buffer是专门用来保存二进制数据。

可以将获取的图片,视频,音频等文件转为二进制数据保存

  • 特点

    • 大小固定: 在创建时就确定了,且无法调整
    • 性能较好:直接对计算机内存进行操作
    • 每个元素大小为1字节(byte)

  • 使用

> Buffer

[Function: Buffer] {
  poolSize: 8192,
  from: [Function: from],
  of: [Function: of],
  alloc: [Function: alloc],
  allocUnsafe: [Function: allocUnsafe],
  allocUnsafeSlow: [Function: allocUnsafeSlow],
  isBuffer: [Function: isBuffer],
  compare: [Function: compare],
  isEncoding: [Function: isEncoding],
  concat: [Function: concat],
  byteLength: [Function: byteLength],
  [Symbol(kIsEncodingSymbol)]: [Function: isEncoding]
  • 创建Buffer

不推荐使用new的方式创建Buffer对象,这样极其浪费性能

推荐使用

1 使用Buffer.alloc()创建Buffer对象,性能较new打的方式要强

let buffer = Buffer.alloc(10);
//创建长度为10的buffer对象

console.log(buffer);
//<Buffer 00 00 00 00 00 00 00 00 00 00>

2 使用Buffer.allocUnsafe()创建,性能是最好的

let buffer = Buffer.allocUnsafe(12);
console.log(buffer);
//<Buffer 00 20 00 00 00 00 00 00 00 00 00 00>

注意此种方式创建的buffer对象并不为空

原因

1 垃圾回收机制

当一段堆中的值失去指针(引用)时,那么这段数据将会被垃圾回收机制回收,然而垃圾回收并不是每时每刻都在查找,而是每隔一段时间进行查找

2 使用new创建的buffer

在创建buffer对象时,首先去堆中划分一个空间,无论这个空间包含是不是没有被垃圾回收的空间,new都会将划分的空间进行一次清理,这是buffer实例获得的空间就是一个干净的空间

3 使用alloc()创建buffer

在创建buffer时,也是首先去堆中划分一个空间,但是这个划分的空间一定会是一个干净的空间,无需清理。

4 使用allocUnsafe()创建buffer

首先在堆划分空间,划分的空间有可能包含未被回收机制及时清理的部分,但是这个方法不会去管理清理这段空间,所以有时候这种方式返回的对象中可能包含垃圾值。

在实际使用中,前两种使用较多


问题?

为什么buffer实例输出的不是二进制,而是16进制?

输出的时候是16进制,但是保存的时候还是2进制

  • 存入数据
//存入数据
let callValue = Buffer.from('hello node');
console.log(callValue);
//<Buffer 68 65 6c 6c 6f 20 6e 6f 64 65>

为什么返回的数值不是字符串?

因为用户存入的数据不一定就是字符串,可能是媒体类型的数据

这种情况如果返回的是字符串,那么将会出现问题

通过toString()方法可以将这段返回的数据转为字符串

//存入数据
let callValue = Buffer.from('hello node');
console.log(callValue.toString());
//'hello node'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值