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的前后端分离的思考与实践(二)模版探索
Sep 26 NodeJs
nodejs实现获取某宝商品分类
May 28 NodeJs
详解Nodejs的timers模块
Dec 22 NodeJs
win系统下nodejs环境安装配置
May 04 NodeJs
nodejs基于express实现文件上传的方法
Mar 19 NodeJs
nodeJs爬虫的技术点总结
May 13 NodeJs
nodejs中express入门和基础知识点学习
Sep 13 NodeJs
nodejs中request库使用HTTPS代理的方法
Apr 30 NodeJs
nodejs开发一个最简单的web服务器实例讲解
Jan 02 NodeJs
nodejs使用Sequelize框架操作数据库的实现
Oct 21 NodeJs
node快速搭建后台的实现步骤
Feb 18 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 超链接 抓取实现代码
2009/06/29 PHP
php和mysql中uft-8中文编码乱码的几种解决办法
2012/04/19 PHP
laravel-admin 实现给grid的列添加行数序号的方法
2019/10/08 PHP
jQuery版仿Path菜单效果
2011/12/15 Javascript
jquery实现非叠加式的搜索框提示效果
2014/01/07 Javascript
jquery使用$(element).is()来判断获取的tagName
2014/08/24 Javascript
Javascript闭包(Closure)详解
2015/05/05 Javascript
在AngularJS中如何使用谷歌地图把当前位置显示出来
2016/01/25 Javascript
jQuery解析与处理服务器端返回xml格式数据的方法详解
2016/07/04 Javascript
在点击div中的p时,如何阻止事件冒泡
2017/02/07 Javascript
详解JavaScript 中getElementsByName在IE中的注意事项
2017/02/21 Javascript
ReactNative实现图片上传功能的示例代码
2017/07/11 Javascript
基于vue.js快速搭建图书管理平台
2017/10/29 Javascript
浅谈在vue中使用mint-ui swipe遇到的问题
2018/09/27 Javascript
监听element-ui table滚动事件的方法
2019/03/26 Javascript
Vant Weapp组件踩坑:picker的初始赋值解决
2020/11/12 Javascript
初学python数组的处理代码
2011/01/04 Python
tensorflow输出权重值和偏差的方法
2018/02/10 Python
基于python实现学生管理系统
2018/10/17 Python
Tensorflow实现神经网络拟合线性回归
2019/07/19 Python
Pycharm远程调试原理及具体配置详解
2019/08/08 Python
Python爬取智联招聘数据分析师岗位相关信息的方法
2019/08/13 Python
PyCharm如何导入python项目的方法
2020/02/06 Python
Windows 下python3.8环境安装教程图文详解
2020/03/11 Python
Python字符串格式化常用手段及注意事项
2020/06/17 Python
Keras实现DenseNet结构操作
2020/07/06 Python
Python Charles抓包配置实现流程图解
2020/09/29 Python
小学教师学期末自我评价
2013/09/25 职场文书
社区十八大感言
2014/01/19 职场文书
《中国的气候》教学反思
2014/02/23 职场文书
创新型城市实施方案
2014/03/06 职场文书
家居装修公司创业计划书范文
2014/03/20 职场文书
机关出纳岗位职责
2014/04/03 职场文书
校园主题婚礼活动策划方案
2014/09/15 职场文书
家庭困难证明
2014/10/12 职场文书
2016年十一促销广告语
2016/01/28 职场文书