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 Post请求报socket hang up错误的解决办法
Sep 25 NodeJs
轻松创建nodejs服务器(6):作出响应
Dec 18 NodeJs
nodejs实例解析(输出hello world)
Jan 03 NodeJs
详谈Angular路由与Nodejs路由的区别
Mar 05 NodeJs
nodejs模块nodemailer基本使用-邮件发送示例(支持附件)
Mar 28 NodeJs
nodejs使用express创建一个简单web应用
Mar 31 NodeJs
nodejs操作mongodb的增删改查功能实例
Nov 09 NodeJs
windows系统下更新nodejs版本的方案
Nov 24 NodeJs
Nodejs把接收图片base64格式保存为文件存储到服务器上
Sep 26 NodeJs
webpack打包nodejs项目的方法
Sep 26 NodeJs
nodejs脚本centos开机启动实操方法
Mar 04 NodeJs
Nodejs实现WebSocket代码实例
May 19 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中利用substr_replace将指定两位置之间的字符替换为*号
2011/01/27 PHP
jquery下onpropertychange事件的绑定方法
2010/08/01 Javascript
jQuery.ajax 用户登录验证代码
2010/10/29 Javascript
深入理解JavaScript系列(6) 强大的原型和原型链
2012/01/15 Javascript
Angularjs中controller的三种写法分享
2016/09/21 Javascript
web 前端常用组件之Layer弹出层组件
2016/09/22 Javascript
AngularJS模板加载用法详解
2016/11/04 Javascript
vue.js初学入门教程(2)
2016/11/07 Javascript
JavaScript动态检验密码强度的实现方法
2016/11/09 Javascript
Bootstrap源码解读按钮(5)
2016/12/23 Javascript
微信小程序实现图片压缩功能
2018/01/26 Javascript
详解Angular-ui-BootStrap组件的解释以及使用
2018/07/13 Javascript
傻瓜式vuex语法糖kiss-vuex整理
2018/12/21 Javascript
layui实现三级导航菜单
2019/07/26 Javascript
Python随机生成手机号、数字的方法详解
2017/07/21 Python
python中Switch/Case实现的示例代码
2017/11/09 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
2018/07/13 Python
Python实现定制自动化业务流量报表周报功能【XlsxWriter模块】
2019/03/11 Python
python简单验证码识别的实现方法
2019/05/10 Python
Tensorflow中tf.ConfigProto()的用法详解
2020/02/06 Python
python ffmpeg任意提取视频帧的方法
2020/02/21 Python
Matplotlib使用Cursor实现UI定位的示例代码
2020/03/12 Python
CSS3控制HTML元素动画效果
2014/02/08 HTML / CSS
欧洲有机婴儿食品最大的市场:Organic Baby Food(供美国和加拿大)
2018/03/28 全球购物
为有想象力的人提供的生活方式商店:Firebox
2018/06/04 全球购物
乌克兰电子和家用电器商店:Foxtrot
2019/07/23 全球购物
照片礼物和装饰:MyPhoto
2019/11/02 全球购物
文职个人求职信范文
2013/09/23 职场文书
工程班组长岗位职责
2013/12/30 职场文书
文明餐桌行动实施方案
2014/02/19 职场文书
中学生学雷锋活动心得体会
2014/03/10 职场文书
采购求职信
2014/03/17 职场文书
综合管理员岗位职责
2015/02/11 职场文书
文化苦旅读书笔记
2015/06/29 职场文书
浅谈Redis的keys命令到底有多慢
2021/10/05 Redis
JS创建或填充任意长度数组的小技巧汇总
2021/10/24 Javascript