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


Posted in NodeJs onJuly 11, 2019

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 相关的使用场景,毕竟工具类函数只有在具体场景下分析才更有价值。

总结

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

NodeJs 相关文章推荐
Nodejs全栈框架StrongLoop推荐
Nov 09 NodeJs
nodejs教程之异步I/O
Nov 21 NodeJs
Nodejs中的this详解
Mar 26 NodeJs
浅析Nodejs npm常用命令
Jun 14 NodeJs
详谈Angular路由与Nodejs路由的区别
Mar 05 NodeJs
使用 NodeJS+Express 开发服务端的简单介绍
Apr 07 NodeJs
NodeJS实现图片上传代码(Express)
Jun 30 NodeJs
NodeJS收发GET和POST请求的示例代码
Aug 25 NodeJs
nodejs实现连接mongodb数据库的方法示例
Mar 15 NodeJs
NodeJS搭建HTTP服务器的实现步骤
Oct 12 NodeJs
nodejs图片处理工具gm用法小结
Dec 12 NodeJs
NodeJs 模仿SIP话机注册的方法
Jun 21 NodeJs
nodejs中各种加密算法的实现详解
Jul 11 #NodeJs
监控Nodejs的性能实例代码
Jul 02 #NodeJs
搭建一个nodejs脚手架的方法步骤
Jun 28 #NodeJs
独立部署小程序基于nodejs的服务器过程详解
Jun 24 #NodeJs
nodejs实现获取本地文件夹下图片信息功能示例
Jun 22 #NodeJs
NodeJs 模仿SIP话机注册的方法
Jun 21 #NodeJs
通过Nodejs搭建网站简单实现注册登录流程
Jun 14 #NodeJs
You might like
隐性调用php程序的方法
2009/03/09 PHP
PHP无法访问远程mysql的问题分析及解决
2013/05/16 PHP
php中执行系统命令的方法
2015/03/21 PHP
PHP中文竖排转换实现方法
2015/10/23 PHP
详解PHP中array_rand函数的使用方法
2016/09/11 PHP
php代码调试利器firephp安装与使用方法分析
2018/08/21 PHP
JS+css 图片自动缩放自适应大小
2013/08/08 Javascript
js将字符串转成正则表达式的实现方法
2013/11/13 Javascript
javascript window.open打开新窗口后无法再次打开该窗口问题的解决方法
2014/04/12 Javascript
js窗口关闭提示信息(兼容IE和firefox)
2015/10/23 Javascript
jquery实现全选功能效果的实现代码
2016/05/05 Javascript
ionic由于使用了header和subheader导致被遮挡的问题的两种解决方法
2016/09/22 Javascript
基于jQuery实现的幻灯图片切换
2016/12/02 Javascript
支持移动端原生js轮播图
2017/02/16 Javascript
iscroll动态加载数据完美解决方法
2017/07/18 Javascript
微信小程序滚动Tab实现左右可滑动切换
2017/08/17 Javascript
探索webpack模块及webpack3新特性
2017/09/18 Javascript
捕获未处理的Promise错误方法
2017/10/13 Javascript
js的函数的按值传递参数(实例讲解)
2017/11/16 Javascript
浅析JS抽象工厂模式
2017/12/14 Javascript
使用classList来实现两个按钮样式的切换方法
2018/01/24 Javascript
js canvas实现红包照片效果
2018/08/21 Javascript
用Python登录Gmail并发送Gmail邮件的教程
2015/04/17 Python
python 判断参数为Nonetype类型或空的实例
2018/10/30 Python
用Python实现读写锁的示例代码
2018/11/05 Python
Python collections.defaultdict模块用法详解
2020/06/18 Python
python 装饰器的实际作用有哪些
2020/09/07 Python
Airbnb爱彼迎官网:成为爱彼迎房东,赚取收入
2019/03/14 全球购物
税务干部个人整改措施思想汇报
2014/10/10 职场文书
五年级上册复习计划
2015/01/19 职场文书
面试感谢信范文
2015/01/22 职场文书
2019年自助餐厅创业计划书模板
2019/08/22 职场文书
详解MySQL InnoDB存储引擎的内存管理
2021/04/08 MySQL
用python修改excel表某一列内容的操作方法
2021/06/11 Python
浅谈Python从全局与局部变量到装饰器的相关知识
2021/06/21 Python
戴尔Win11系统no bootable devices found解决教程
2022/09/23 数码科技