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个字符:½+¼=¾
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Node.js缓冲区Buffer)是用于在网络通信、文件操作等场景下,处理二进制数据的类。它类似于数组,但是可以存储不同类型的数据,并提供了一系列方法用于操作数据。 Node.js缓冲区是一个全局对象,可以直接使用。它的构造函数如下: ```javascript var buf = new Buffer(size) ``` 其,size 表示缓冲区的大小,单位为字节。缓冲区的大小一旦确定,就不能再改变。 除了使用构造函数创建缓冲区外,还可以使用字面量来创建缓冲区,例如: ```javascript var buf = new Buffer('hello world', 'utf8') ``` 上述代码将字符串 'hello world' 转换成了一个缓冲区,使用的字符编码为 UTF-8。 Node.js缓冲区提供了一系列方法,用于读取、写入、截取、比较等操作。常用方法包括: - buf.toString():将缓冲区转换成字符串。 - buf.write(string[, offset[, length]][, encoding]):将一个字符串写入缓冲区。 - buf.slice([start[, end]]):从缓冲区截取一部分数据。 - buf.compare(otherBuffer):比较两个缓冲区的大小。 - buf.copy(targetBuffer[, targetStart[, sourceStart[, sourceEnd]]]):将缓冲区的数据复制到另一个缓冲区。 除了以上方法缓冲区还提供了许多其他的方法,可以根据具体需求选择使用。 需要注意的是,Node.js缓冲区是一种底层的数据结构,使用不当可能会导致内存泄漏等问题。因此,在使用缓冲区时,应该特别小心。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值