Node.js中Buffer缓冲区(概念及常用方法总结)

Buffer定义

Javascript比较擅长处理字符串,对于处理二进制数据(比如TCP数据流),就不太擅长。(在处理像TCP流或文件流时,必须使用到二进制数据),因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区,Buffer中存放的数据是0~255之间的整数值(即一个字节的数据)

通俗来讲:通常情况下,我们传输数据往往是为了处理它,或者读它,或者基于这些数据做处理等。但是,在每次传输过程中,有一个数据量的问题。因此当数据到达的时间比数据理出的时间快的时候,这个时候我们处理数据就需要等待了。

或者,如果处理数据的时间比到达的时间快,这一时刻仅仅到达了一小部分数据,那这小部分数据需要等待剩下的数据填满,然后再送过去统一处理。

这个”等待区域”就是buffer!

Buffer对象是Node处理二进制数据的一个接口。它是Node原生提供的全局对象,可以直接使用,不需要使用require(‘buffer’)引入buffer。

Buffer对象

Buffer对象又称为缓冲区对象,它有一个构造函数,由构造函数创建的对象,v8引擎会为其分配一块内存


创建buffer对象

(1)使用new运算符

//创建一个大小为8的空buffer
var bytes=new Buffer(8)
for(var i=0;i<bytes.length;i++){
	bytes[i]=i
}
consoloe.log(bytes)  
//<Buffer 00 01 02 03 04 05 06 07>

(2)使用from函数

const buf1=Buffer.from([1,2,3])
console.log(buf1)
//<Buffer 01 02 03>

(3)使用alloc函数

例如:创建一个长度为10的缓冲区,并且用0填充

const buf2=Buffer.alloc(10)
console.log(buf2)
//<Buffer 00 00 00 00 00 00 00 00 00 00>

缓存区的拷贝

接上例

var more=new Buffer(4)
bytes.copy(more,0,4,8)
console.log(more)  
//<Buffer 04 05 06 07>

Buffer与字符编码

Buffer 实例一般用于表示编码字符的序列,比如 UTF-8 或十六进制编码的数据。 通过使用显式的字符编码,就可以在 Buffer 实例与普通的 JavaScript 字符串之间进行相互转换。

const buf=Buffer.from('Hello World','ascii')
console.log(buf)
//<Buffer 48 65 6c 6c 6f 20 57 6f 72 6c 64>

const buf2=Buffer.from('tést')
console.log(buf2)
//<Buffer 74 c3 a9 73 74>

console.log(buf2.toString('utf8',0,3))
//té

Buffer转换为JSON

JSON:JavaScript Object Notation对象,时前后端数据交换的常用格式,是以key-value的方式保存数据,由于体积小,创建方便,解析简单,所以被广泛应用。
只要应用程序需要将结构化信息作为文本进行交换或村相互,即可使用它。

const buf=Buffer.from([0x1,0x2,0x3,0x4,0x5])
var json=JSON.stringify(buf)
console.log(json)

//{"type":"Buffer","data":[1,2,3,4,5]}

缓冲区写入数据

语法:

buf.write(string[, offset[, length]][, encoding])
  • string - 写入缓冲区的字符串。
  • offset - 缓冲区开始写入的索引值,默认为 0 。
  • length - 写入的字节数,默认为 buffer.length
  • encoding - 使用的编码。默认为 ‘utf8’ 。

例如:

var buf=Buffer.alloc(256)
let len=buf.write('Hello')
console.log(`写入字节数:${len}`)
//写入字节数:5

注意:如果 buffer 空间不足, 则只会写入部分字符串。

读取缓冲区数据

语法:

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

例如:

var buf8=Buffer.alloc(256)
let len=buf8.write('\u00bd+\u00bc=\u00be',0);   //write函数的返回值是写入的字节数   从第0个位置开始写
console.log(`${len}个字符:${buf8.toString('utf8',0,len)}`); 

//8个字符:½+¼=¾
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值