欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

nodejs二进制与Buffer的介绍与使用

程序员文章站 2022-04-09 12:33:15
buffer 介绍 javascript 中对数据处理都是以字符串的形式,而对于二进制数据就不便于处理,所以 buffer 便是用于读取或操作二进制数据都对象。...

buffer 介绍

javascript 中对数据处理都是以字符串的形式,而对于二进制数据就不便于处理,所以 buffer 便是用于读取或操作二进制数据都对象。

一句话概括: buffer 类是一个全局变量,用于直接处理二进制数据,提供工具类方法。

官网上关于 buffer 解释的非常清楚,所以就不再拷贝官网,这里列举一些使用较为频繁的场景。

对象转换成buffer

在操作文件或者io的场景中,我们需要将对象转换成二进制数据流。

引用官方文档

  • buffer.from(array) 返回一个新的 buffer,其中包含提供的八位字节数组的副本。
  • buffer.from(arraybuffer[, byteoffset [, length]]) 返回一个新的 buffer,它与给定的 arraybuffer 共享相同的已分配内存。
  • buffer.from(buffer) 返回一个新的 buffer,其中包含给定 buffer 的内容的副本。
  • buffer.from(string[, encoding]) 返回一个新的 buffer,其中包含提供的字符串的副本。
  • buffer.alloc(size[, fill[, encoding]]) 返回一个指定大小的新建的的已初始化的 buffer。 此方法比 buffer.allocunsafe(size) 慢,但能确保新创建的 buffer 实例永远不会包含可能敏感的旧数据。
  • buffer.allocunsafe(size) 和 buffer.allocunsafeslow(size) 分别返回一个指定大小的新建的未初始化的 buffer。 由于 buffer 是未初始化的,因此分配的内存片段可能包含敏感的旧数据。

栗子如下

const obj = {
 name:'test'
}
const buffer = buffer.from(json.stringify(obj),'utf8') // 默认编码是 utf8 

buffer 对象转换成其它机制的字符串

我们可以看到 buffer 对象是一个 uint8array 的实例,所以我们可以使用迭代器获取 buffer 中数组的值。

nodejs二进制与Buffer的介绍与使用

1、buffer 对象转二进制字符串,便利获取到数组中的值,通过 number.tostring(radix) 方法,将整形转换成二进制字符串,最后将各个数值的二进制字符串拼接起来即可。但为了后续对二进制操作方便,所以我们约定好二进制的长度,因为 buffer 数组是在 0 到 255 之间的整数数组,255 的二进制是 8 位,所以我们在转换过程中把不足八位的前置补零,当然这还是得看具体的场景.

bytestobinary(bytes) {
 const length = bytes.length;
 let result = '';
 for (let i = 0; i < length; i++) {
  const binstr = number(bytes[i]).tostring(2)
  result += '0'.repeat(8 - binstr.length) + binstr; // 不足八位前置补0
 }
 return result.tostring();
}

2、buffer转成 16 进制也是类似,如下

bytestobinary(bytes) {
 const length = bytes.length;
 let result = '';
 for (let i = 0; i < length; i++) {
  const binstr = number(bytes[i]).tostring(16)
  result += '0'.repeat(2 - binstr.length) + binstr; // 不足二位前置补0
 }
 return result.tostring();
}

小结

关于 buffer 的介绍网上有很多文章,但我觉得都不如官网写的清晰,所以建议大家直接看文档。

后续会继续补充在工作中遇到与 buffer 相关的使用场景,毕竟工具类函数只有在具体场景下分析才更有价值。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。