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 Express框架中处理404页面一个方式
May 28 NodeJs
Nodejs实现的一个简单udp广播服务器、客户端
Sep 25 NodeJs
nodejs教程之入门
Nov 21 NodeJs
nodejs下打包模块archiver详解
Dec 03 NodeJs
NodeJS学习笔记之(Url,QueryString,Path)模块
Jan 13 NodeJs
浅谈NodeJS中require路径问题
May 07 NodeJs
深入浅析NodeJs并发异步的回调处理
Dec 21 NodeJs
windows 下安装nodejs 环境变量设置
Feb 02 NodeJs
nodejs读写json文件的简单方法(必看)
Mar 09 NodeJs
详解nodejs微信公众号开发——4.自动回复各种消息
Apr 11 NodeJs
NodeJS自定义模块写法(详解)
Jun 27 NodeJs
nodejs简单抓包工具使用详解
Aug 23 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从字符串创建函数的方法
2015/03/16 PHP
PHP经典面试题之设计模式(经常遇到)
2015/10/15 PHP
PHP使用curl模拟post上传及接收文件的方法
2016/03/04 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
2017/08/11 PHP
Laravel框架控制器的request与response用法示例
2019/09/30 PHP
Laravel 将数据表的数据导出,并生成seeds种子文件的方法
2019/10/09 PHP
bcastr2.0 通用的图片浏览器
2006/11/22 Javascript
一个XML格式数据转换为图表的例子
2010/02/09 Javascript
JavaScript限定复选框的选择个数示例代码
2013/08/25 Javascript
JavaScript前端图片加载管理器imagepool使用详解
2014/12/29 Javascript
JQuery查找DOM节点的方法
2015/06/11 Javascript
javascript实现连续赋值
2015/08/10 Javascript
javaScript实现可缩放的显示区效果代码
2015/10/26 Javascript
js实现网页图片延时加载 提升网页打开速度
2016/01/26 Javascript
基于javascript实现checkbox复选框实例代码
2016/01/28 Javascript
BootStrap 智能表单实战系列(二)BootStrap支持的类型简介
2016/06/13 Javascript
JS实现动态修改table及合并单元格的方法示例
2017/02/20 Javascript
微信小程序 同步请求授权的详解
2017/08/04 Javascript
基于Vue生产环境部署详解
2017/09/15 Javascript
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)
2019/09/01 Javascript
细说webpack6 Babel的使用详解
2019/09/26 Javascript
JS时间戳与日期格式互相转换的简单方法示例
2021/01/30 Javascript
深入理解NumPy简明教程---数组3(组合)
2016/12/17 Python
Python实现的摇骰子猜大小功能小游戏示例
2017/12/18 Python
python基础教程项目二之画幅好画
2018/04/02 Python
django执行数据库查询之后实现返回的结果集转json
2020/03/31 Python
关于Theano和Tensorflow多GPU使用问题
2020/06/19 Python
tensorflow 大于某个值为1,小于为0的实例
2020/06/30 Python
HTML5实现QQ聊天气泡效果
2017/06/26 HTML / CSS
草莓网官网:StrawberryNET
2019/08/21 全球购物
干部下基层实施方案
2014/03/14 职场文书
工作疏忽检讨书500字
2014/10/26 职场文书
2014年卫生保健工作总结
2014/12/08 职场文书
幸福家庭事迹材料
2014/12/20 职场文书
mysql联合索引的使用规则
2021/06/23 MySQL