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的url截取模块url-extract的使用实例
Nov 18 NodeJs
14款NodeJS Web框架推荐
Jul 11 NodeJs
轻松创建nodejs服务器(6):作出响应
Dec 18 NodeJs
nodejs中实现阻塞实例
Mar 24 NodeJs
Windows系统下使用Sublime搭建nodejs环境
Apr 13 NodeJs
nodeJs链接Mysql做增删改查的简单操作
Feb 04 NodeJs
nodejs处理图片的中间件node-images详解
May 08 NodeJs
CentOS 安装NodeJS V8.0.0的方法
Jun 15 NodeJs
使用nodeJs来安装less及编译less文件为css文件的方法
Nov 20 NodeJs
nodejs的路径问题的解决
Jun 30 NodeJs
Nodejs让异步变成同步的方法
Mar 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代码
2007/03/08 PHP
PHP脚本中include文件出错解决方法
2008/11/20 PHP
php安装dblib扩展,连接mssql的具体步骤
2017/03/02 PHP
详解PHP序列化和反序列化原理
2018/01/15 PHP
Yii2框架redis基本应用示例
2018/07/13 PHP
PHP中非常有用却鲜有人知的函数集锦
2019/08/17 PHP
javascript 一个自定义长度的文本自动换行的函数
2007/08/19 Javascript
网页中CDATA标记的说明
2010/09/12 Javascript
js日期相关函数总结分享
2013/10/15 Javascript
JQuery中dataGrid设置行的高度示例代码
2014/01/03 Javascript
jquery队列queue与原生模仿其实现方法分享
2014/03/25 Javascript
如何获取网站icon有哪些可行的方法
2014/06/05 Javascript
AngularJS基础教程之简单介绍
2015/09/27 Javascript
javascript bom是什么及bom和dom的区别
2015/11/26 Javascript
简述Matlab中size()函数的用法
2016/03/20 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
2016/08/23 Javascript
JavaScript实现body内任意节点的自定义属性功能示例
2017/09/18 Javascript
让axios发送表单请求形式的键值对post数据的实例
2018/08/11 Javascript
node使用Mongoose类库实现简单的增删改查
2018/11/08 Javascript
jquery获取并修改触发事件的DOM元素示例【基于target 属性】
2019/10/10 jQuery
[48:29]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS KG
2018/03/31 DOTA
Python算法之求n个节点不同二叉树个数
2017/10/27 Python
Python正则表达式匹配和提取IP地址
2019/06/06 Python
Python检查图片是否损坏及图片类型是否正确过程详解
2019/09/30 Python
Python中输入和输出(打印)数据实例方法
2019/10/13 Python
Django实现分页显示效果
2019/10/31 Python
python 利用turtle模块画出没有角的方格
2019/11/23 Python
使用PyTorch实现MNIST手写体识别代码
2020/01/18 Python
莫斯科高科技在线商店:KremlinStore
2019/03/13 全球购物
大一自我鉴定范文
2013/10/04 职场文书
幼师专业求职推荐信
2013/11/08 职场文书
青年文明号复核材料
2014/02/11 职场文书
董事长助理岗位职责
2014/02/18 职场文书
舞蹈专业大学生职业规划范文
2014/03/12 职场文书
卫生院艾滋病宣传活动小结
2014/07/09 职场文书
公安机关起诉意见书
2015/05/20 职场文书