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的子进程(child_process)调用系统命令的方法分享
Jun 05 NodeJs
nodejs开发微博实例
Mar 25 NodeJs
Windows系统下使用Sublime搭建nodejs环境
Apr 13 NodeJs
Nodejs学习笔记之入门篇
Apr 16 NodeJs
nodejs制作爬虫实现批量下载图片
May 19 NodeJs
nodejs中sleep功能实现暂停几秒的方法
Jul 12 NodeJs
nodeJS微信分享
Dec 20 NodeJs
nodejs+express搭建多人聊天室步骤
Feb 12 NodeJs
NodeJs 文件系统操作模块fs使用方法详解
Nov 26 NodeJs
深入理解nodejs搭建静态服务器(实现命令行)
Feb 05 NodeJs
nodejs实现百度舆情接口应用示例
Feb 07 NodeJs
Nodejs在局域网配置https访问的实现方法
Oct 17 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
一个连接两个不同MYSQL数据库的PHP程序
2006/10/09 PHP
织梦模板标记简介
2007/03/11 PHP
php ajax数据传输和响应方法
2018/08/21 PHP
jquery 删除字符串最后一个字符的方法解析
2014/02/11 Javascript
javascript编写实用的省市选择器
2015/02/12 Javascript
JS实现跟随鼠标的链接文字提示框效果
2015/08/06 Javascript
JS 通过系统时间限定动态添加 select option的实例代码
2016/06/09 Javascript
jquery仿ps颜色拾取功能
2017/03/08 Javascript
vue 粒子特效的示例代码
2017/09/19 Javascript
微信小程序自定义tabBar在uni-app的适配详解
2019/09/30 Javascript
Vue项目vscode 安装eslint插件的方法(代码自动修复)
2020/04/15 Javascript
python 判断一个进程是否存在
2009/04/09 Python
python中enumerate函数遍历元素用法分析
2016/03/11 Python
sublime text 3配置使用python操作方法
2017/06/11 Python
Python基于scapy实现修改IP发送请求的方法示例
2017/07/08 Python
Python3.4编程实现简单抓取爬虫功能示例
2017/09/14 Python
使用Anaconda3建立虚拟独立的python2.7环境方法
2018/06/11 Python
详解Python3.6的py文件打包生成exe
2018/07/13 Python
浅谈pandas筛选出表中满足另一个表所有条件的数据方法
2019/02/08 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
2019/07/10 Python
PyQt5通信机制 信号与槽详解
2019/08/07 Python
Python中生成一个指定长度的随机字符串实现示例
2019/11/06 Python
基于Python获取docx/doc文件内容代码解析
2020/02/17 Python
Python通过文本和图片生成词云图
2020/05/21 Python
python爬虫多次请求超时的几种重试方法(6种)
2020/12/01 Python
Pycharm 如何一键加引号的方法步骤
2021/02/05 Python
雅诗兰黛旗下走天然植物路线的彩妆品牌:Prescriptives
2016/08/14 全球购物
瑞士隐形眼镜和护理产品网上商店:Linsenklick
2019/10/21 全球购物
会计大学生职业生涯规划书范文
2014/01/13 职场文书
学生安全责任书模板
2014/07/25 职场文书
初中国旗下的演讲稿
2014/08/28 职场文书
房屋出租协议书范本(标准版)
2014/09/24 职场文书
个人房屋转让协议书范本
2014/10/26 职场文书
三八妇女节主持词
2015/07/04 职场文书
2016年寒假社会实践活动总结
2015/10/10 职场文书
解决WINDOWS电脑开机后桌面没有任何图标
2022/04/09 数码科技