Buffer主要用于操作二进制流,Buffer类在全局作用域中,因此可以直接用,无需用require引入,Buffer类似于整数数组,但是不同的是它的长度是固定的,无法改变。C++代码在V8堆外分配物理内存。
// 创建一个长度为10,且用9填充的Buffer
const buff1 = Buffer.alloc(10,9)
console.log(buff1)
/*
allocUnsafe与alloc方法类似,不同的是它没有实例化,所以调用的时候和可能有老数据,因此使用之前要使用 fill() 或 write() 重写。最后补充一点它的速度比alloc快,但是介意一般情况使用alloc
*/
// 创建一个包含1,2,4的Buffer
const buff2 = Buffer.from([1,2,5])
console.log(buff2)
下面总结几个比较常用的api
1.Buffer.byteLength() 返回字符串的实际字节长度
const buff3 = Buffer.byteLength("hello");
const buff4 = Buffer.byteLength("你好");
console.log(buff3)
console.log(buff4)
2.Buffer.isBuffer(obj),如果 obj
是一个 Buffer
,则返回 true
,否则返回 false
。
const buff5 = Buffer.isBuffer(Buffer.from([1,3,5]))
const buff6 = Buffer.isBuffer({})
console.log(buff5,buff6);
3.Buffer.concat(),合并buffer并返回一个新的Buffer
const buff1 = Buffer.from("I ")
const buff2 = Buffer.from("name ")
const buff3 = Buffer.from("lixian")
const buf = Buffer.concat([buff1,buff2,buff3])
console.log(buf.toString())
4.buf.length,返回内存中分配给 buf
的字节数。 不一定反映 buf
中可用数据的字节量。
const buf = Buffer.alloc(1225)
console.log(buf.length)
const buf2 = Buffer.from('I am girl')
console.log(buf2.length)
5.buf.toString([encoding[, start[, end]]])
根据 encoding
指定的字符编码将 buf
解码成字符串。hex将buf1转为16进制,具体内容可查看文档http://nodejs.cn/api/buffer.html#buffer_buf_tostring_encoding_start_end
const buf1 = Buffer.from("asdfasdf");
console.log(buf1.toString('hex'));
6.buf.fill(value[, offset[, end]][, encoding])
value
<string> | <Buffer> | <Uint8Array> | <integer> 用来填充buf
的值。offset
<integer> 开始填充buf
的偏移量。默认值:0
。end
<integer> 结束填充buf
的偏移量(不包含)。默认值:buf.length
。encoding
<string> 如果value
是字符串,则指定value
的字符编码。默认值:'utf8'
。const buf1 = Buffer.allocUnsafe(10); console.log(buf1) console.log(buf1.fill(10,2,6))
7. buf.equals()
比较两个 buffer的值,如果相等返回true,如果不想等返回false
const buf1 = Buffer.from('abc');
const buf2 = Buffer.from('abc')
console.log(buf1.equals(buf2))
8.buf.indexOf() 查找指定的值
buf
中首次出现 value
的索引,如果 buf
没包含 value
则返回 -1
const buf1 = Buffer.from('test');
console.log(buf1.indexOf('st'))