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(二)--- Node.js事件模块
May 21 NodeJs
NodeJS制作爬虫全过程
Dec 22 NodeJs
NodeJS学习笔记之FS文件模块
Jan 13 NodeJs
nodejs搭建本地服务器并访问文件的方法
Mar 03 NodeJs
深入理解Nodejs Global 模块
Jun 03 NodeJs
使用nodeJs来安装less及编译less文件为css文件的方法
Nov 20 NodeJs
对mac下nodejs 更新到最新版本的最新方法(推荐)
May 17 NodeJs
通过nodejs 服务器读取HTML文件渲染到页面的方法
May 17 NodeJs
nodejs的路径问题的解决
Jun 30 NodeJs
nodejs 十六进制字符串型数据与btye型数据相互转换
Jul 30 NodeJs
使用nodejs分离html文件里的js和css详解
Apr 12 NodeJs
Nodejs技巧之Exceljs表格操作用法示例
Nov 06 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原创论坛
2006/10/09 PHP
PHP经典的给图片加水印程序
2006/12/06 PHP
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
2007/08/26 PHP
PDO版本问题 Invalid parameter number: no parameters were bound
2013/01/06 PHP
JoshChen_web格式编码UTF8-无BOM的小细节分析
2013/08/16 PHP
PHP使用in_array函数检查数组中是否存在某个值
2015/03/25 PHP
laravel5.2表单验证,并显示错误信息的实例
2019/09/29 PHP
JavaScript入门学习书籍推荐
2008/06/12 Javascript
用showModalDialog弹出页面后,提交表单总是弹出一个新窗口
2009/07/18 Javascript
IE 条件注释详解总结(附实例代码)
2009/08/29 Javascript
JavaScript 变量命名规则
2009/09/23 Javascript
JS、CSS以及img对DOMContentLoaded事件的影响
2014/08/12 Javascript
详解JavaScript UTC时间转换方法
2016/01/07 Javascript
三种带箭头提示框总结实例
2016/06/14 Javascript
Kendo Grid editing 自定义验证报错提示的解决方法
2016/11/18 Javascript
ionic中列表项增加和删除的实现方法
2017/01/22 Javascript
Bootstrap 过渡效果Transition 模态框(Modal)
2017/03/17 Javascript
AngularJS中$http的交互问题
2017/03/29 Javascript
JS调用安卓手机摄像头扫描二维码
2018/10/16 Javascript
Vue 实现创建全局组件,并且使用Vue.use() 载入方式
2020/08/11 Javascript
JavaScript 空间坐标的使用
2020/08/19 Javascript
查看Python安装路径以及安装包路径小技巧
2015/04/28 Python
Pycharm学习教程(3) 代码运行调试
2017/05/03 Python
python 进程 进程池 进程间通信实现解析
2019/08/23 Python
Python Django中间件,中间件函数,全局异常处理操作示例
2019/11/08 Python
Python实现序列化及csv文件读取
2020/01/19 Python
Python 实现国产SM3加密算法的示例代码
2020/09/21 Python
Python xlrd/xlwt 创建excel文件及常用操作
2020/09/24 Python
CSS3弹性盒模型flex box快速入门心得(必看篇)
2016/05/24 HTML / CSS
优秀技术工人先进材料
2014/02/17 职场文书
内刊编辑求职自荐书范文
2014/02/19 职场文书
市场营销方案范文
2014/03/11 职场文书
大学三年计划书范文
2014/04/30 职场文书
数学教育专业求职信
2014/07/22 职场文书
GoLang中生成UUID唯一标识的实现
2021/05/08 Golang
nginx搭建NFS网络文件系统
2022/04/14 Servers