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 相关文章推荐
Ubuntu中搭建Nodejs开发环境过程分享
Jun 01 NodeJs
nodejs中使用多线程编程的方法实例
Mar 24 NodeJs
nodejs开发微博实例
Mar 25 NodeJs
解析NodeJs的调试方法
Dec 11 NodeJs
nodejs制作爬虫实现批量下载图片
May 19 NodeJs
详解nodeJS之路径PATH模块
May 31 NodeJs
nodejs中密码加密处理操作详解
Mar 20 NodeJs
nodejs读取并去重excel文件
Apr 22 NodeJs
Nodejs 和 Electron ubuntu下快速安装过程
May 04 NodeJs
nodejs之koa2请求示例(GET,POST)
Aug 07 NodeJs
手把手教你如何使用nodejs编写cli命令行
Nov 05 NodeJs
Nodejs核心模块之net和http的使用详解
Apr 02 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设计模式 Observer(观察者模式)
2011/06/26 PHP
ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法
2014/11/04 PHP
php实现的SESSION类
2014/12/02 PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
2016/04/04 PHP
2007/12/23更新创意无限,简单实用(javascript log)
2007/12/24 Javascript
自己的js工具 Cookie 封装
2009/08/21 Javascript
nodejs的require模块(文件模块/核心模块)及路径介绍
2013/01/14 NodeJs
jquery解决图片路径不存在执行替换路径
2013/02/06 Javascript
利用JS判断用户是否上网(连接网络)
2013/12/23 Javascript
jQuery+css实现的切换图片功能代码
2016/01/27 Javascript
jQuery实现点击查看大图并以弹框的形式居中
2016/08/08 Javascript
JS实现获取图片大小和预览的方法完整实例【兼容IE和其它浏览器】
2017/04/24 Javascript
深入理解vue.js中的v-if和v-show
2017/06/22 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
[53:52]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python 专题六 局部变量、全局变量global、导入模块变量
2017/03/20 Python
Python去除、替换字符串空格的处理方法
2018/04/01 Python
解决python中使用plot画图,图不显示的问题
2018/07/04 Python
Python实现针对json中某个关键字段进行排序操作示例
2018/12/25 Python
django框架防止XSS注入的方法分析
2019/06/21 Python
python 利用turtle库绘制笑脸和哭脸的例子
2019/11/23 Python
TensorFlow tf.nn.max_pool实现池化操作方式
2020/01/04 Python
在keras中实现查看其训练loss值
2020/06/16 Python
keras topN显示,自编写代码案例
2020/07/03 Python
如何现实servlet的单线程模式
2014/08/05 面试题
白酒业务员岗位职责
2013/12/27 职场文书
煤矿班组长岗位职责
2013/12/29 职场文书
医学生职业规划范文
2014/01/05 职场文书
财务管理职业生涯规划书
2014/02/26 职场文书
学历公证书范本
2014/04/09 职场文书
食品安全演讲稿
2014/09/01 职场文书
学校元旦晚会开场白
2014/12/14 职场文书
安全检查汇报材料
2014/12/26 职场文书
雷锋电影观后感
2015/06/10 职场文书
党章党规党纪学习心得体会
2016/01/14 职场文书
linux中nohup和后台运行进程查看及终止
2021/06/24 Python