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入门详解(多篇文章结合)
Mar 07 NodeJs
Nodejs异步回调的优雅处理方法
Sep 25 NodeJs
windows下安装nodejs及框架express
Aug 07 NodeJs
Nodejs如何复制文件
Mar 09 NodeJs
快速掌握Node.js之Window下配置NodeJs环境
Mar 21 NodeJs
简单好用的nodejs 爬虫框架分享
Mar 26 NodeJs
NodeJs测试框架Mocha的安装与使用
Mar 28 NodeJs
nodejs个人博客开发第七步 后台登陆
Apr 12 NodeJs
nodejs 搭建简易服务器的图文教程(推荐)
Jul 18 NodeJs
nodejs 递归拷贝、读取目录下所有文件和目录
Jul 18 NodeJs
Nodejs中使用puppeteer控制浏览器中视频播放功能
Aug 26 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
PHP 将图片按创建时间进行分类存储的实现代码
2010/01/05 PHP
mysql查找删除重复数据并只保留一条实例详解
2016/09/24 PHP
php版微信小店调用api示例代码
2016/11/12 PHP
js每次Title显示不同的名言
2008/09/25 Javascript
基于jquery的动态创建表格的插件
2011/04/05 Javascript
alert和confirm功能介绍
2014/05/21 Javascript
jQuery针对input的class属性写了多个值情况下的选择方法
2016/06/03 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
2017/01/10 Javascript
详解使用grunt完成requirejs的合并压缩和js文件的版本控制
2017/03/02 Javascript
js使用generator函数同步执行ajax任务
2017/09/05 Javascript
Vue仿手机qq的实例代码(demo)
2017/09/08 Javascript
浅谈微信JS-SDK 微信分享接口开发(介绍版)
2018/08/15 Javascript
利用不到200行代码写一款属于你自己的js类库
2019/07/08 Javascript
解决Can't find variable: SockJS vue项目的问题
2020/09/22 Javascript
python和pyqt实现360的CLable控件
2014/02/21 Python
解决pycharm启动后总是不停的updating indices...indexing的问题
2019/11/27 Python
Python中Flask-RESTful编写API接口(小白入门)
2019/12/11 Python
Pytorch实现基于CharRNN的文本分类与生成示例
2020/01/08 Python
pytorch实现mnist分类的示例讲解
2020/01/10 Python
你可能不知道的Python 技巧小结
2020/01/29 Python
解决pymysql cursor.fetchall() 获取不到数据的问题
2020/05/15 Python
TensorFlow keras卷积神经网络 添加L2正则化方式
2020/05/22 Python
Python使用Chrome插件实现爬虫过程图解
2020/06/09 Python
只要五步 就可以用HTML5/CSS3快速制作便签贴特效(图)
2012/06/04 HTML / CSS
HTML5 拖放功能实现代码
2016/07/14 HTML / CSS
德国古洛迷亚百货官网:GALERIA Kaufhof
2017/06/20 全球购物
澳大利亚在线家具店:Luxo Living
2019/03/24 全球购物
高级电工工作职责
2013/11/21 职场文书
幼儿园教师工作感言
2014/02/15 职场文书
《罗布泊,消逝的仙湖》教学反思
2014/03/01 职场文书
《美丽的田园》教学反思
2014/03/01 职场文书
2014年财务工作总结范文
2014/11/11 职场文书
2014年采购部工作总结
2014/11/20 职场文书
环保建议书作文400字
2015/09/14 职场文书
实习报告范文
2019/07/30 职场文书
国产动画《万圣街》日语配音版制作决定!
2022/03/20 国漫