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 整合kindEditor实现图片上传
Feb 03 NodeJs
nodejs入门教程三:调用内部和外部方法示例
Apr 24 NodeJs
mac下的nodejs环境安装的步骤
May 24 NodeJs
详解nodejs通过代理(proxy)发送http请求(request)
Sep 22 NodeJs
NodeJs实现定时任务的示例代码
Dec 05 NodeJs
关于Mac下安装nodejs、npm和cnpm的教程
Apr 11 NodeJs
详解Nodejs内存治理
May 13 NodeJs
详解Nodejs get获取远程服务器接口数据
Mar 26 NodeJs
监控Nodejs的性能实例代码
Jul 02 NodeJs
Nodejs监听日志文件的变化的过程解析
Aug 04 NodeJs
NodeJS实现一个聊天室功能
Nov 25 NodeJs
nodejs环境使用Typeorm连接查询Oracle数据
Dec 05 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编程效率的53个要点(经验小结)
2010/09/04 PHP
PHP的cURL库功能简介 抓取网页、POST数据及其他
2011/04/07 PHP
解析thinkphp的左右值无限分类
2013/06/20 PHP
PHP微信刮刮卡 附微信接口
2016/07/22 PHP
PHP Laravel中的Trait使用方法
2019/01/20 PHP
实例讲解PHP表单
2020/06/10 PHP
让innerHTML的脚本也可以运行起来
2006/07/01 Javascript
网页开发中的容易忽略的问题 javascript HTML中的table
2009/04/15 Javascript
js修改地址栏URL参数解决url参数问题
2012/12/15 Javascript
javascript为下拉列表动态添加数据项
2014/05/23 Javascript
使用jQuery简单实现模拟浏览器搜索功能
2014/12/21 Javascript
js实现鼠标经过时图片滚动停止的方法
2015/02/16 Javascript
IE8下jQuery改变png图片透明度时出现的黑边
2015/08/30 Javascript
jQuery中trigger()与bind()用法分析
2015/12/18 Javascript
bootstrap导航栏、下拉菜单、表单的简单应用实例解析
2017/01/06 Javascript
javascript实现数字配对游戏的实例讲解
2017/12/14 Javascript
vue+Element-ui实现分页效果实例代码详解
2018/12/10 Javascript
egg.js的基本使用和调用数据库的方法示例
2019/05/18 Javascript
[42:20]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python聚类算法之基本K均值实例详解
2015/11/20 Python
Python DataFrame 设置输出不显示index(索引)值的方法
2018/06/07 Python
python requests 测试代理ip是否生效
2018/07/25 Python
python实现多进程代码示例
2018/10/31 Python
python 用所有标点符号分隔句子的示例
2019/07/15 Python
Python配置文件处理的方法教程
2019/08/29 Python
自适应线性神经网络Adaline的python实现详解
2019/09/30 Python
Python实现图片批量加入水印代码实例
2019/11/30 Python
解决pycharm不能自动保存在远程linux中的问题
2021/02/06 Python
营销与策划个人求职信
2013/09/22 职场文书
给国外客户的邀请函
2014/01/30 职场文书
领导干部作风建设工作总结
2014/10/23 职场文书
横空出世观后感
2015/06/09 职场文书
2015年城管执法工作总结
2015/07/23 职场文书
商业计划书范文
2019/04/24 职场文书
Python实现简单的俄罗斯方块游戏
2021/09/25 Python
PostgreSQL聚合函数介绍以及分组和排序
2022/04/12 PostgreSQL