千锋扣丁学堂HTML5培训之nodejs二进制与Buffer示例详解

codingker 2019-07-11

今天千锋扣丁学堂HTML5培训老师给大家分享一篇关于nodejs二进制与Buffer的介绍与使用,文中通过示例代码介绍的非常详细,对大家学习或者使用nodejs具有一定的参考学习价值,下面我们一起来看一下吧。

千锋扣丁学堂HTML5培训之nodejs二进制与Buffer示例详解

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中数组的值。

千锋扣丁学堂HTML5培训之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();
}

以上就是关于千锋扣丁学堂HTML5培训之nodejs二进制与Buffer示例详解的全部内容,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,想要了解更多关于HTML5方面内容的小伙伴,请关注扣丁学堂HTML5培训官网、微信等平台,扣丁学堂IT职业在线学习教育平台为您提供权威的HTML5开发视频,HTML5培训后的前景无限,行业薪资和未来的发展会越来越好的,扣丁学堂老师精心推出的HTML5视频教程定能让你快速掌握HTML5从入门到精通开发实战技能。扣丁学堂H5技术交流群:673883249。

相关推荐