NodeJs-buffer模块

Buffer(缓冲区)

1.Buffer的结构跟数组很像,操作方法也和数组类似。既然有数组Array,那么为啥还需要使用Buffer。

2.我们先说一个情况:

当我们访问web服务器时,会返回各种各样的数据,如果这时候传回的是一个图片或者视频,但我们都知道图片和视频是一段二进制数据。所以这时候我们再使用Array来存放数据就不太合适了,所以Buffer应用而生。来接收一段二进制文件。

3.我们都知道用户的请求都是二进制形式的,所以在服务器端都是使用Buffer来接收。

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

  • javaScript比较擅长处理字符串,对于处理二进制数据(比如TCP数据流),就不太擅长。Buffer对象就是为了解决这个问题而设计的。他是一个构造函数,生成了实例代表了V8引擎分配的一段内存,是一个类似数组的对象,成员都是0-255的整数值,即一个8位的字节。

  • javaScript只有字符串数据类型,没有二进制数据类型,但在处理像TCP流或文件流时,必须使用到二级制数据。以你存在Node中定义了一个Buffer类,该类用来创建一个专门存放二进制数据的缓冲区。

4.将一个字符串保存到Buffer中

var str="hello world"
//将字符串转换为buffer元素
var buf=Buffer.from(str);
console.log(buf);	//输出的结果是一段16进制数字,这对应着unicode编码表中的字符。

这时候就可能有人会问了,不是说buffer存放的是二进制吗,怎么这里输出的结果是16进制。其实Buffer中存放的都是二进制,但在输出的时候二进制一长串,不太好看,所以在显示的时候,计算机会自动给我们转为16进制。

5.buffer中的每一个元素的范围都是从00-ff,中的每一个元素,占用内存的一个字节。一个汉字占三个字节。

6.创建一个指定大小的buffer:new Buffer/Buffer.alloc(size)

var buf2=new Buffer(10);	//10个字节的buffer 但是使用Bufferg构造函数创建buffer的方法并不推荐使用
var buf2=Buffer.alloc(10);	//推荐使用的方法
//通过索引,来操作buf中的元素
buf2[0]=88;
buf2[1]=255;
//或者直接放入一个十六进制的数
buf2[2]=0xaa;
//当传入的值大于255时
buf2[3]=556;		//这时候该位置存放的是556二进制的低八位
console.log(buf2);	//输出的是10个十六进制的数字
//只要数字在控制台或页面中输出一定是10进制
console.log(buf2[2]);//输出的结果就是一个10进制的数字。

7.buffer的大小一旦确定就,则不能修改。原因:buffer实际上是对底层内存的直接操作。所以一旦在内存中创建一块区域,那么就已经固定了。

8.toString()

js中我们知道数字类型有toString()方法,只要给定确定的进制参数,就能输出指定进制的值。

console.log(buf2[2].toString(16)); //以十六进制输出
console.log(buf2[2].toString(2));	//以二进制输出

如果我们想要将缓冲区中的数据输出一段字符串的也可以使用toString()方法

var buf3=Buffer.from("我是一段文本数据");
console.log(buf3.toString());	//输出字符串“我是一段文本数据”。

7.Buffer.allocUnsafe(size) 创建一个指定大小的buffer,Buffer以这种方式创建的实例的基础内存未初始化。新创建的内容Buffer未知, 可能包含敏感数据

const buf = Buffer.allocUnsafe(10);
console.log(buf);
// Prints (contents may vary): <Buffer a0 8b 28 3f 01 00 00 00 50 32>

但是这个方法的性能方面是要比上面的alloc更加好的。因为不需要对内存进行初始化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值