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框架Express的模板视图机制分析
Jul 19 NodeJs
nodejs简单实现中英文翻译
May 04 NodeJs
NodeJS中的MongoDB快速入门详细教程
Nov 11 NodeJs
深入nodejs中流(stream)的理解
Mar 27 NodeJs
NodeJS自定义模块写法(详解)
Jun 27 NodeJs
nodejs后台集成ueditor富文本编辑器的实例
Jul 11 NodeJs
深入解析nodejs HTTP服务
Jul 25 NodeJs
通过nodejs 服务器读取HTML文件渲染到页面的方法
May 17 NodeJs
nodejs实现一个word文档解析器思路详解
Aug 14 NodeJs
手把手教你如何使用nodejs编写cli命令行
Nov 05 NodeJs
NodeJs 实现简单WebSocket即时通讯的示例代码
Aug 05 NodeJs
NodeJs使用webpack打包项目的方法详解
Feb 28 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得到某段时间区间的时间戳 php定时任务
2012/04/12 PHP
编写php应用程序实现摘要式身份验证的方法详解
2013/06/08 PHP
php实现遍历目录并删除指定文件中指定内容
2015/01/21 PHP
php使用NumberFormatter格式化货币的方法
2015/03/21 PHP
php实现的通用图片处理类
2015/03/24 PHP
PHP实现bitmap位图排序与求交集的方法
2016/07/28 PHP
jqGrid读取选择的多行的某个属性代码
2014/05/18 Javascript
jquery事件preventDefault()方法用法实例
2015/01/16 Javascript
jQuery插件slick实现响应式移动端幻灯片图片切换特效
2015/04/12 Javascript
JS实现三个层重叠点击互相切换的方法
2015/10/06 Javascript
JavaScript数据结构与算法之链表
2016/01/29 Javascript
利用Angular+Angular-Ui实现分页(代码加简单)
2017/03/10 Javascript
vuex刷新后数据丢失的解决方法
2020/10/18 Javascript
javascript实现固定侧边栏
2021/02/09 Javascript
python之模拟鼠标键盘动作具体实现
2013/12/30 Python
python中for语句简单遍历数据的方法
2015/05/07 Python
在Python 3中实现类型检查器的简单方法
2015/07/03 Python
python3学生名片管理v2.0版
2018/11/29 Python
Python线程指南分享
2019/11/19 Python
python将时分秒转换成秒的实例
2019/12/07 Python
Python 通过正则表达式快速获取电影的下载地址
2020/08/17 Python
Django限制API访问频率常用方法解析
2020/10/12 Python
python解包概念及实例
2021/02/17 Python
实列教程 一款基于jquery和css3的响应式二级导航菜单
2014/11/13 HTML / CSS
css3 flex布局 justify-content:space-between 最后一行左对齐
2020/01/02 HTML / CSS
HTML5的文档结构和新增标签完全解析
2017/04/21 HTML / CSS
台湾生鲜宅配:大口市集
2017/10/14 全球购物
新员工欢迎词
2014/01/12 职场文书
文明城市标语
2014/06/16 职场文书
物联网工程专业推荐信
2014/09/08 职场文书
讲文明知礼仪演讲稿
2014/09/13 职场文书
房地产销售主管岗位职责
2015/02/13 职场文书
获奖感言范文
2015/07/31 职场文书
2016年基层党组织公开承诺书
2016/03/25 职场文书
python神经网络学习 使用Keras进行回归运算
2022/05/04 Python
python解析照片拍摄时间进行图片整理
2022/07/23 Python