什么是Buffer
buufer是处理二进制字节的一种方式,常用于TCP流、文件系统操作等场景。
Buffer的存储方式:
* 我们可以将Buffer看成是一个存储二进制的数组;
* 这个数组中的每一项,可以保存8位二进制:00000000(也就是一个字节)。
为什么是8位呢?
· 在计算机中,很少的情况我们会直接操作一位二进制,因为二进制存储的数据是非常有限的;
· 所以,通常会将8位合在一起,作为一个单元,这个单元称之为一个字节(byte);
· 也就是说1byte=8bit,1kb=1024byte,1M=1024kb;
· 比如很多编程语言中的int类型是4个字节,long类型是8个字节的个数;
· TCP传输的是字节流,在写入和读取时都需要说明字节的个数;
· RGB的值分别都是255,所以本质上在计算机中都是用一个字节存储的;
例:
(1)将字符串存储到Buffer中(默认编码方式:utf8)
const s = 'abc吕'
// 方法一:(已经过时了该方法)
const r = new Buffer(s) // 创建Buffer
// 方法二: (一个中文一般占三个字节)
const r = Buffer.from(s)
console.log(r)
下边显示的是16进制
(2)对buffer进行解码(默认解码方式:utf8):
const s = 'abc吕'
const r = Buffer.from(s)
console.log('对字节进行解码:', r.toString()) // 'abc吕'
Buffer类
Buffer缓冲区大小
缓冲区大小在创建时确定,默认大小为8kb,这是用于缓冲池的预分配的内部 Buffer
实例的大小(以字节为单位),该值可以修改。
// 8192byte -> 8kb
console.log(Buffer.poolSize)
实例化Buffer
Buffer.from支持四种参数类型
· Buffer.from (string/buffer/array/abject)
const buf1 = Buffer.from('test', 'utf-8') // node默认采用utf-8编码方式
console.log(r1) // <Buffer 74 65 73 74>
const buf2 = Buffer.from(buf1) // buf1的副本,修改buf2不会影响buf1
编码
Buffer目前支持一下几种编码格式:
· ascii
· utf8
· utf16le
· base64
· binary
· hex
Buffer和string转换
Buffer.from(string, [, encoding]) 字符串转为Buffer
const buf = Buffer.from('test', 'utf-8') // <Buffer 74 65 73 74>
Buffer.toString([encoding]) Buffer转字符串
const buf = Buffer.from('test')
const str = buf.toString() // 'test'
Buffer拼接
Buffer.concat(list) 方法可以把多个Buffer实例拼接为一个Buffer实例
const buf1 = Buffer.from('a')
const buf2 = Buffer.from('b')
const buf3 = Buffer.from('c')
const buf = Buffer.concat([buf1, buf2, buf3])
console.log(buf) // <Buffer 61 62 63>
Buffer其它常用API
(1)Buffer.isBuffer() 判断对象是否为Buffer
const buf = Buffer.from('a')
console.log(Buffer.isBuffer(buf)) // true