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 相关文章推荐
PHPStorm 2020.1 调试 Nodejs的多种方法详解
Sep 17 NodeJs
NodeJs中的非阻塞方法介绍
Jun 05 NodeJs
Nodejs实现批量下载妹纸图
May 28 NodeJs
Nodejs爬虫进阶教程之异步并发控制
Feb 15 NodeJs
Jquery通过ajax请求NodeJS返回json数据实例
Nov 08 NodeJs
Nodejs+Socket.io实现通讯实例代码
Feb 13 NodeJs
Nodejs调用WebService的示例代码
Sep 29 NodeJs
nodejs中Express与Koa2对比分析
Feb 06 NodeJs
Nodejs实现爬虫抓取数据实例解析
Jul 05 NodeJs
nodejs基础之常用工具模块util用法分析
Dec 26 NodeJs
详解nodejs 开发企业微信第三方应用入门教程
Mar 12 NodeJs
nodejs实现日志读取、日志查找及日志刷新的方法分析
May 20 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中Session的概念
2006/10/09 PHP
mayfish 数据入库验证代码
2010/04/30 PHP
二招解决php乱码问题
2012/03/25 PHP
php返回相对时间(如:20分钟前,3天前)的方法
2015/04/14 PHP
Yii2 rbac权限控制之rule教程详解
2016/06/23 PHP
php获取当前月与上个月月初及月末时间戳的方法
2016/12/05 PHP
一个简单的js鼠标划过切换效果
2010/06/30 Javascript
jquery.boxy插件的iframe扩展代码
2010/07/02 Javascript
JavaScript获取网页表单提交方式的方法
2015/04/02 Javascript
分享JS数组求和与求最大值的方法
2016/08/11 Javascript
JS获取及验证开始结束日期的方法
2016/08/20 Javascript
JS判断一个数是否是水仙花数
2017/06/11 Javascript
vue router下的html5 history在iis服务器上的设置方法
2017/10/18 Javascript
微信小程序实现折叠与展开文章功能
2018/06/12 Javascript
小程序实现多个选项卡切换
2020/06/19 Javascript
python开发之函数定义实例分析
2015/11/12 Python
python函数中return后的语句一定不会执行吗?
2017/07/06 Python
Python排序搜索基本算法之插入排序实例分析
2017/12/11 Python
对python的文件内注释 help注释方法
2018/05/23 Python
Linux下python3.6.1环境配置教程
2018/09/26 Python
python numpy元素的区间查找方法
2018/11/14 Python
对Python模块导入时全局变量__all__的作用详解
2019/01/11 Python
python enumerate内置函数用法总结
2020/01/07 Python
python 计算方位角实例(根据两点的坐标计算)
2020/01/17 Python
Python 实现将某一列设置为str类型
2020/07/14 Python
Pycharm学生免费专业版安装教程的方法步骤
2020/09/24 Python
Python就将所有的英文单词首字母变成大写
2021/02/12 Python
新西兰航空中国官网:Air New Zealand China
2018/07/24 全球购物
初中女生自我鉴定
2013/12/19 职场文书
事业单位接收函
2014/01/10 职场文书
学生会主席事迹材料
2014/01/28 职场文书
社区党的群众路线教育实践活动总结材料
2014/10/31 职场文书
工厂清洁工岗位职责
2015/02/14 职场文书
通过shell脚本对mysql的增删改查及my.cnf的配置
2021/07/07 MySQL
人工智能深度学习OpenAI baselines的使用方法
2022/05/20 Python
Springboot集成kafka高级应用实战分享
2022/08/14 Java/Android