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中Buffer模块详解
Jan 07 NodeJs
NodeJS学习笔记之(Url,QueryString,Path)模块
Jan 13 NodeJs
NodeJS学习笔记之Connect中间件应用实例
Jan 27 NodeJs
深入浅析NodeJs并发异步的回调处理
Dec 21 NodeJs
nodejs的HTML分析利器node-jquery用法浅析
Nov 08 NodeJs
nodejs个人博客开发第六步 数据分页
Apr 12 NodeJs
详解nodejs实现本地上传图片并预览功能(express4.0+)
Jun 28 NodeJs
详解nodeJs文件系统(fs)与流(stream)
Jan 24 NodeJs
NodeJS如何实现同步的方法示例
Aug 24 NodeJs
PHPStorm中如何对nodejs项目进行单元测试详解
Feb 28 NodeJs
通过Nodejs搭建网站简单实现注册登录流程
Jun 14 NodeJs
nodejs中各种加密算法的实现详解
Jul 11 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
漫威DC即将合作联动,而双方早已经秘密开始
2020/04/09 欧美动漫
迅雷下载《中学科技》怀旧期刊下载
2021/02/27 无线电
PHP如何得到当前页和上一页的地址?
2006/11/27 PHP
php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
2009/09/05 PHP
PHP中__FILE__、dirname与basename用法实例分析
2014/12/01 PHP
Laravel框架控制器,视图及模型操作图文详解
2019/12/04 PHP
JQuery从头学起第一讲
2010/07/04 Javascript
JavaScript 打地鼠游戏代码说明
2010/10/12 Javascript
JS限制上传图片大小不使用控件在本地实现
2012/12/19 Javascript
jquery鼠标滑过提示title具体实现代码
2013/08/06 Javascript
jQuery中document与window以及load与ready 区别详解
2014/12/29 Javascript
jquery模拟alert的弹窗插件
2015/07/31 Javascript
js实现仿网易点击弹出提示同时背景变暗效果
2015/08/13 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
2017/03/25 Javascript
基于JavaScript实现弹幕特效
2020/08/27 Javascript
jquery实现点击a链接,跳转之后,该a链接处显示背景色的方法
2018/01/18 jQuery
详解js根据百度地图提供经纬度计算两点距离
2019/05/13 Javascript
微信小程序中如何计算距离某个节日还有多少天
2019/07/15 Javascript
layui实现三级联动效果
2019/07/26 Javascript
微信小程序左滑删除实现代码实例
2019/09/16 Javascript
nodejs对mongodb数据库的增加修删该查实例代码
2020/01/05 NodeJs
vue-cli点击实现全屏功能
2020/03/07 Javascript
Python获取当前时间的方法
2014/01/14 Python
Python的Django框架中的数据库配置指南
2015/07/17 Python
Python实现的堆排序算法原理与用法实例分析
2017/11/22 Python
Python实现元素等待代码实例
2019/11/11 Python
python文字转语音的实例代码分析
2019/11/12 Python
Python的对象传递与Copy函数使用详解
2019/12/26 Python
办公自动化毕业生求职信
2014/03/09 职场文书
市级绿色学校申报材料
2014/08/25 职场文书
年度考核个人总结
2015/03/06 职场文书
2015年乡镇人大工作总结
2015/04/22 职场文书
《青山不老》教学反思
2016/02/22 职场文书
redis内存空间效率问题的深入探究
2021/05/17 Redis
用Python生成会跳舞的美女
2022/01/18 Python
CSS 实现角标效果的完整代码
2022/06/28 HTML / CSS