缓冲 buffer
创建
Buffer类在Node.js中是全局变量,无需使用require('buffer')
Buffer类的实例类似于整数数组,但Buffer的大小是固定的,在创建时确定,无法调整
Buffer.alloc(size, fill, encoding)
返回一个指定大小的被填满的 Buffer`实例。
size:新建的Buffer期望长度
fill 用来预填充新建的Buffer的值,默认为0
encoding 如果fill是字符串,则该值是它的字符编码
Buffer.allocUnsafe(size)
调用Buffer.alloc()会明显地比另一个方法 Buffer.allocUnsafe()慢,但是能确保新建的Buffer实例的内容不会包含敏感数据。
Buffer.from(array)
返回一个被 array 的值初始化的新的 Buffer 实例,array必须是一个数组
Buffer.from(arrayBuffer, byteOffset , length)
返回一个新建的与给定的 ArrayBuffer共享同一内存的 Buffer。
**改变原始的arraybuffer也会改变buffer
arrayBuffer:ArrayBufferSharedArrayBuffer或 TypedArray的 .buffer属性。
byteOffset:开始拷贝的索引,默认为0
length:拷贝的字节数
const arr=new Uint16Array(2);
arr[0]=5000
arr[1]=4000
const buf=Buffer.from(arr.buffer)
Buffer.from(buffer)
返回一个新建的包含所提供的 Buffer 的内容的副本的 Buffer。只是拷贝和上一种方法并不同,改变原始buffer,不会改变后创建的
Buffer.from(string, encoding)
新建一个包含string的buffer,encoding参数指定string的字符编码
写入缓冲区
buf.write(string,offset,length,encoding)
根据 encoding 的字符编码写入 string 到 buf 中的 offset 位置
读取数据
buf.toString(encoding,start,end)
根据encoding指定的字符编码解码buf成一个字符串,start和end可传入用于只解码buf的一部分
buf.toJSON()
返回buf的JSON格式
缓冲区操作
合并Buffer.concat(list, totalLength)
list - 用于合并的 Buffer 对象数组列表。
比较buf.compare(otherBuffer)
返回一个数字,表示buf在otherBuffer之前,之后或者相同
拷贝buf.copy(targetBuffer, targetStart, sourceStart, sourceEnd)
将buf拷贝到targetBuffer的targetStart位置
裁剪buf.slice(start, end)
长度 buf.length
应用
全部试一下
//创建buffer,new buffer()已经被废弃了
//创建一个由string组成的buffer
const buf1=Buffer.alloc(10,'asdafadafs')
console.log(buf1);
//返回值为<Buffer 61 73 64 61 66 61 64 61 66 73>
const buf2 = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);
console.log(buf2);
//返回值<Buffer 62 75 66 66 65 72>
const arr=new Uint8Array(5);
//Uint8Array:8位无符号整数,长度1个字节。必须是ArrayBuffer所以直接用Array会报错
arr[0]=0x62
arr[1]=0x75
arr[2]=0x66
arr[3]= 0x66
arr[4]= 0x65
const buf3=Buffer.from(arr.buffer);
console.log(buf3)
//返回值<Buffer 62 75 66 66 65>
arr[4]=0x72
console.log(buf3);
//返回值<Buffer 62 75 66 66 72>
const buf4=Buffer.from(buf1)
console.log(buf4);
//返回值<Buffer 61 73 64 61 66 61 64 61 66 73>
const buf5=Buffer.from("buffer")
console.log(buf5)
//返回值<Buffer 62 75 66 66 65 72>
const buf6=Buffer.alloc(6)
buf6.write("buffer")
console.log(buf6)
//返回值<Buffer 62 75 66 66 65 72>
const str=buf6.toString();
console.log(str)
//返回值为buffer
const jso=buf6.toJSON();
console.log(jso)
//返回值{ type: 'Buffer', data: [ 98, 117, 102, 102, 101, 114 ] }
const buf7=Buffer.concat([buf1,buf6])
const str2=buf7.toString()
console.log(str2)
//返回值asdafadafsbuffer
console.log(buf1.compare(buf6))
//返回值为-1,buf6在buf1后面
buf6.copy(buf1,2)
const str3=buf1.toString()
console.log(str3)
//返回值asbufferfs会把原来buffer相应位置值替换掉
const buf8=buf1.slice(2,8)
const str4=buf8.toString()
console.log(str4)
//返回值是buffer,第一个数字是起始位置,结束是返回的buffer最后一位后面那一位
console.log(buf8.length)
网友评论