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文件操作模块FS(File System)常用函数简明总结
Jun 05 NodeJs
如何正确使用Nodejs 的 c++ module 链接到 OpenSSL
Aug 03 NodeJs
NodeJS Web应用监听sock文件实例
Feb 18 NodeJs
nodeJs爬虫获取数据简单实现代码
Mar 29 NodeJs
进阶之初探nodeJS
Jan 24 NodeJs
NodeJS基础API搭建服务器详细过程记录
Apr 01 NodeJs
深入学习nodejs中的async模块的使用方法
Jul 12 NodeJs
基于nodejs+express4.X实现文件下载的实例代码
Jul 13 NodeJs
详解webpack打包nodejs项目(前端代码)
Sep 19 NodeJs
NodeJS服务器实现gzip压缩的示例代码
Oct 12 NodeJs
独立部署小程序基于nodejs的服务器过程详解
Jun 24 NodeJs
nodejs使用Sequelize框架操作数据库的实现
Oct 21 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企业级应用之常见缓存技术篇
2011/01/27 PHP
菜单效果
2006/10/14 Javascript
js 解决“options为空或不是对象”
2008/12/22 Javascript
JavaScript与Image加载事件(onload)、加载状态(complete)
2011/02/14 Javascript
下载文件个别浏览器文件名乱码解决办法
2013/03/19 Javascript
使用jquery实现div的tab切换实例代码
2013/05/27 Javascript
JQuery对id中含有特殊字符的转义处理示例
2013/09/06 Javascript
Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效
2015/03/06 Javascript
javascript实现base64 md5 sha1 密码加密
2015/09/09 Javascript
js实现的下拉框二级联动效果
2016/04/30 Javascript
jquery实现下拉框多选方法介绍
2017/01/03 Javascript
JavaScript中的普通函数和箭头函数的区别和用法详解
2017/03/21 Javascript
Node.js 路由的实现方法
2019/06/05 Javascript
在node环境下parse Smarty模板的使用示例代码
2019/11/15 Javascript
初步探究Python程序的执行原理
2015/04/11 Python
使用Python的Twisted框架构建非阻塞下载程序的实例教程
2016/05/25 Python
TensorFlow的权值更新方法
2018/06/14 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
2018/10/29 Python
python gensim使用word2vec词向量处理中文语料的方法
2019/07/05 Python
Django打印出在数据库中执行的语句问题
2019/07/25 Python
python实现倒计时小工具
2019/07/29 Python
python pandas.DataFrame.loc函数使用详解
2020/03/26 Python
基于python实现数组格式参数加密计算
2020/04/21 Python
Html5移动端网页端适配(js+rem)
2021/02/03 HTML / CSS
老海军美国官网:Old Navy
2016/09/05 全球购物
Manuka Doctor美国官网:麦卢卡蜂蜜和蜂毒护肤
2016/12/25 全球购物
可爱的童装和鞋子:Fabkids
2019/08/16 全球购物
英国No.1体育用品零售商:SportsDirect.com
2019/10/16 全球购物
小学英语教学反思案例
2014/02/04 职场文书
2014年圣诞节促销方案
2014/03/14 职场文书
2014年纪检工作总结
2014/11/12 职场文书
2014年化妆品销售工作总结
2014/12/01 职场文书
大学生旷课检讨书1000字
2015/02/19 职场文书
关于践行三严三实的心得体会
2016/01/05 职场文书
2016年小学党支部创先争优活动总结
2016/04/05 职场文书
银行求职信范文
2019/05/13 职场文书