当前位置:澳门贵宾厅 > 澳门贵宾厅 > 新建一个Buffer实例澳门贵宾厅,就有可能使用到Buffer类
新建一个Buffer实例澳门贵宾厅,就有可能使用到Buffer类
2020-03-23
Buffer.concat = function(list,length=list.reduce((a,b) = a+b.length,0){ //通过对list的长度求和,计算指定长度 let buffer = Buffer.alloc(length); let offset = 0; list.forEach(item = { item.copy(buffer,0); //利用copy方法,依次复制 offset += item.length; //更新每次的复制指针 }) return buffer;}

9、buf.fill(value[, offset[, end]][, encoding])

第一个入参value为填充buf的值,第二和第三个参数为填充起始和结束的位置,如果不传,默认为全部填充。第四个参数为value的字符编码。

然后,记录当前分割位置,将已分割和分割字符的长度求和

2、Buffer.allocUnsafe(size) 一般不建议使用

以这种方式创建的 Buffer实例的底层内存是未初始化的。 新创建的 Buffer的内容是未知的,且可能包含敏感数据
可以使用 buf.fill(0)初始化 Buffer实例为0。

首先看concat的使用方式

10、buf.equals(otherBuffer)

比较两个Buffer实例对象,如果 buf 与 otherBuffer 具有完全相同的字节,则返回 true,否则返回 false。

循环遍历,直到查询结束为止

3、Buffer.from()

参数可以传入一个数组,字符串等等,详细用法见官网api

返回的值是多个成员合并的新Buffer对象

11、buf.indexOf(value[, byteOffset][, encoding])

第一个参数为需要搜索的值,第二个参数为搜索的起始位置, 默认为0。

用来声明一段固定大小的Buffer实例,如果没有设置fill,则默认填满0

12、buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])

第一个参数为要拷贝进的 Buffer。

对分割的起始位置进行更新

官网API地址:http://nodejs.cn/api/buffer.html

1.7 buffer.indexOf()

6、Buffer.concat(list[, totalLength])

返回一个合并了 list 中所有 Buffer 实例的新建的 Buffer 。
第一个参数是一个数组,例如:[buf1, buf2, buf3]
第二个参数为合并时 list 中 Buffer 实例的总长度。如果没有提供 totalLength ,则从 list 中的 Buffer 实例计算得到。 为了计算 totalLength 会导致需要执行额外的循环,所以提供明确的长度会运行更快。

最终方法为:

1、Buffer.alloc(size[, fill[, encoding]])

新建一个Buffer实例,传入的三个参数分别为内存上分配的大小,填充的内容,编码格式,默认为utf8。

首先,需要得出分割字符串的长度

4、Buffer.byteLength(string[, encoding])

返回一个字符串的实际字节长度,第一个参数为要计算长度的值,第二个参数为字符编码,默认为utf8

时间: 2019-12-22阅读: 70标签: 方法

8、buf.toString([encoding[, start[, end]]])

根据 encoding 指定的字符编码解码 buf 成一个字符串。 start 和 end 可传入用于只解码 buf 的一部分。

let buffer = Buffer.from('前爱端爱优爱选');let res = buffer.split('爱');//期望输出结果:['前','端','优','选'];

7、buf.length

返回Buffer实例对象在字节数上分配的内存量。 注意,这并不一定反映 buf 内可用的数据量。

toString默认使用的编码是uft8,返回指定编码的字符串;该方法还可指定读取索引的起始结束位置

5、Buffer.isBuffer(obj)

判断传入参数是否为一个Buffer对象

let buffer = Buffer.from('前端优选');let result = Buffer.isBuffer(buffer);//true
Buffer.prototype.split = function(step){ let len = Buffer.from(step).length; let offset = 0; let current = 0; let arr = []; while(-1 != this.indexOf(step,offset)){ current = this.indexOf(step,offset); arr.push(this.slice(offset,current)); offset = current + len; } arr.push(this.slice(offset)); //将剩余结果进行添加 return arr.map(item = item.toString());}
let buff1 = Buffer.from('前端');let buff2 = Buffer.from('优选');buff1.copy(buff2,0,0,3);console.log(buff2.toString());//前选(从buff2的0位置起始,拷贝buff1的0-3位置之间的字符,操作对象为buff2)

3.Buffer自定义方法3.1 split方法

返回的是内存区长度;一个汉子包括三个字节,则结果就是4*3=12个字节长度

1.6 buffer.slice(start[,end])

Buffer存在于全局对象上,是必须要了解和掌握的知识。Buffer是在内存中开辟一片区域,用来存放二进制数据,在文件的读取和传输上,有着重要的作用。

分析:该方法至少需要传递两个参数:用于合并的数组列表(必填)、指定合并后的总长度(可选)

letlen = Buffer.from(step).length;

那么需要自定义一个split方法

let buffer = Buffer.from([11,12,13]);let newBuff = buffer.slice(0,3);newBuff[0] = 100;console.log(buffer);//Buffer 64 0c 0d
Buffer.prototype.split = function(step){ let arr = []; return arr;}
//接上个例子console.log(newBuff.toString());//前端

返回一个新的buffer值,和原有值指向同一个内存区

let buffer = Buffer.alloc(6);console.log(buffer);//Buffer 00 00 00 00 00 00

1.3 buffer.toString([encoding[,start[,end]]])

Buffer类,是用来创建一个专门存放二进制数据的缓存区。每当需要处理二进制数据时,就有可能使用到Buffer类。

let buffer = Buffer.from('前端优选');let result = buffer.slice(6,12);console.log(result.toString());//优选
offset= current + len;

指定要拷贝的目标,从目标起始位置开始,拷贝源buffer的指定起始和结束位置之间的字符该方法没有返回值,直接对target进行操作

1.9 buffer.copy(target[,targetStart[,sourceStart[,sourceEnd]]])

该结果返回的是十六进制、UTF-8编码格式的字节

let buffer = Buffer.from('前端优选');let length = buffer.length;console.log(length);//12

3.2 手动实现Buffer的concat方法

let current =this.indexOf(step,offset);
let buffer = Buffer.from('前端优选');console.log(buffer);//Buffer e5 89 8d e7 ab af e4 bc 98 e9 80 89

其次,指定每次的分割起始位置

1.2 Buffer.from()

4.总结

let buffer = Buffer.from('前端优选');let index = buffer.indexOf('优选');console.log(index);//6

原文:

letoffset=0;//初次分割从0开始,然后依次累加

判断一个值是否为Buffer类型,返回的结果为布尔值

1.4 buffer.length

while(-1 != this.indexOf(step,offset)){ current = this.indexOf(step,offset); arr.push(this.slice(offset,current)); offset = current + len;}
let buffer1 = Buffer.from('前端');let buffer2 = Buffer.from('优选');let buffer3 = Buffer.concat([buffer1,buffer2]);console.log(buffer3);console.log(buffer3.toString());//Buffer e5 89 8d e7 ab af e4 bc 98 e9 80 89//前端优选

2.Buffer的特点

返回字符串的内存起始位置

let buff1 = Buffer.from('前端');let buff2 = Buffer.from('优选');let buff3 = Buffer.concat([buff1,buff2]);console.log(buff3.toString());//前端优选

Buffer是引用的内存空间,换句话说就是引用类型的值,不管是截取或更改,都是对内存空间的修改,因此都会改变原有的值。

1.8 Buffer.concat(list[,length])

1.Buffer的常用方法1.1 Buffer.alloc()

1.5 Buffer.isBuffer()