Buffer的基本操作
Buffer对象是Node处理二进制数据的一个接口。它是Node原生提供的全局对象,可以直接使用,不需要require(‘buffer’)
实例化Buffer对象
- Buffer.alloc(size[, fill[, encoding]]):返回一个指定大小的 Buffer 实例,如果没有设置 fill,则默认填满 0
1 2 3
// 创建一个长度为 5、且用 0 填充的 Buffer。 let buf = Buffer.alloc(5) console.log(buf)//结果:<Buffer 00 00 00 00 00>
- Bufffer.from(string[, encoding]): 返回一个被 string 的值初始化的新的 Buffer 实例
1 2
let buf = Buffer.from('hello') console.log(buf)//结果:<Buffer 68 65 6c 6c 6f>
- Bufffer.from(array): 返回一个被 array 的值初始化的新的 Buffer 实例(传入的 array 的元素只能是数字,不然就会自动被 0 覆盖)
1 2 3
//创建一个新的包含utf-8字节的缓冲区 const buf = new Buffer([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]); console.log(buf)//结果:buffer
功能方法
- Buffer.isEncoding():判断是否支持该编码,如果支持返回true,否则返回false
目前支持的编码:’ascii’,’utf8’,’utf16le’,’ucs2’,’base64’,’latin1’,’binary’,’hex’
- Buffer.isBuffer():判断是否为Buffer,如果是返回true,否则返回false
- Buffer.byteLength():返回指定编码的字节长度,默认utf-8
1 2
let buf = Buffer.from('中国') console.log(Buffer.byteLength(buf))//结果:6
- Buffer.concat():将一组Buffer对象合并为一个Buffer对象
1 2 3 4
let buf1 = Buffer.from('Tom and') let buf2 = Buffer.from('Jerry') let buf3 = Buffer.concat([buf1, buf2]) console.log(buf3.toString())//结果:Tom and Jerry
实例方法
- buf.write(string[, offset[, length]][, encoding]):向buffer对象写入内容
可选参数:
offset:从哪个位置开始写,默认是0
length:写入多少个字节,默认是buf.length
encoding:编码类型,默认是’utf8’1 2 3
let buf = Buffer.alloc(5) buf.write('hello') console.log(buf)//结果:<Buffer 68 65 6c 6c 6f>
- buf.slice([start[, end]]):截取新的buffer对象
可选参数:
start:新 Buffer 开始的位置。默认值: 0
end:新 Buffer 结束的位置(不包含)。默认值: buf.length。1 2 3
let buf = Buffer.from('hello') let buf1 = buf.slice(2,4) console.log(buf1)//结果:ll
- buf.toString([encoding[, start[, end]]]):把buffer对象转成字符串
1 2
let buf = Buffer.from('hello') console.log(buf.toString())//结果:hello
- buf.toJson([encoding[, start[, end]]]):把buffer对象转成json形式的字符串(toJson方法不需要显式调用,当JSON.stringify方法调用的时候会自动调用toJSON方法)
1 2 3
let buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5]); let json = JSON.stringify(buf); console.log(json);// 结果: {"type":"Buffer","data":[1,2,3,4,5]}