node.js中的buffer模块

一、概述

Buffer库为Node.js带来了一种存储原始数据的方法,可以让Nodejs处理二进制数据,每当需要在Nodejs中处理I/O操作中移动的数据时,就有可能使用Buffer库。原始数据存储在 Buffer 类的实例中。一个 Buffer 类似于一个整数数组,但它对应于 V8 堆内存之外的一块原始内存。与其他模块不同的是,在应用时无需引用此模块,因为它是全局访问的,只需在使用时实例一下即可。在node环境下打印buffer可以看到buffer是一个对象,也是一个构造函数,具有自己的属性和静态方法。

二、Buffer有三种形式的构造函数:

① Buffer.alloc();;//创建一个buffer

②Buffer.from(array);//通过构造函数使用数组初始化缓存区

③Buffer.from(str,[encoding]);//通过构造函数使用字符串初始化缓存区

三、Buffer的类方法

1、 isBuffer()方法

isBuffer()方法可以判断一个对象是否为一个Buffer()对象。程序示例:

Buffer.isBuffer(obj);

2、byteLength()方法

使用byteLength()方法可以计算一个字符串的字节长度。

程序实例:

Buffer.byteLength(string,[encoding]);

参数说明:

①string:表示被测试的字符串

②encoding:表示字符串的编码格式,默认为UTF-8。

3、 concat()方法

使用concat()方法可以将几个Buffer对象结合为一个新的Buffer对象。程序实例:

Buffer.concat(list,[totalLength]);

参数说明:

①list:表示一个装有多个Buffer对象的数组。

②totalLength:表示被创建的Buffer对象的总长度。

4、isEncdoing()方法

isEncoding()方法用于检测一个字符串是否为一个有效的编码格式字符串,程序实例:

Buffer.isEncoding(string);//string表示被检测的字符串

5、compare(a,b)方法

Buffer的比较,常用于buffer实例数组的排序

6、Buffer.from(array)

通过一个八位字节的 array 创建一个新的 Buffer 。

7、Buffer.from(buffer)

将传入的 buffer 数据拷贝到一个新建的 Buffer 实例。

8、Buffer.from(string[, encoding])

新建一个包含所给的 JavaScript 字符串 string 的 Buffer 。 encoding 参数指定 string 的字符编码。

9、Buffer.from(arrayBuffer[, byteOffset[, length]])

  • arrayBuffer : ArrayBuffer 或 SharedArrayBuffer 或 TypedArray 的 .buffer 属性。
  • byteOffset  开始拷贝的索引。默认为 0
  • length  拷贝的字节数。默认为 arrayBuffer.length - byteOffset

该方法将创建一个 ArrayBuffer 的视图,而不会复制底层内存。例如,当传入一个 TypedArray 实例的 .buffer 属性的引用时,这个新建的 Buffer 会像 TypedArray 那样共享同一分配的内存。

四、buffer的应用

1、写入buffer:buf.write

var buf = Buffer.alloc(7);buf.write("12345678)
console.log(buf)//输出<Buffer 31 32 33 34 35 36 37>

2、读取buffer:buffer.toString()按照存入的编码进行读取。除了toString()函数,还可以用toJSON()直接将Buffer解析成JSON对象。

var buf =Buffer.from('hello 你好');
buf.write("hi 你好") //回车输出9

buf.toString()//输出“hi 你好好”,会补齐长度12

五、buffer代码应用(在node环境下输出以下代码实例)

1、Buffer.alloc 实例

Buffer.from("hello 李四");
//输出<Buffer 68 65 6c 6c 6f 20 e6 9d 8e e5 9b 9b>一串字符,默认是utf8编码格式,也可修改编码格式

2、指定编码格式“base64”

Buffer.from("hello 李四","base64");
//输出<Buffer 85 e9 65 a0>

3、buffer的长度

var buf =Buffer.alloc(8)
buf.length //8

4、输出指定内存大小的buffer,多余的部分会被舍弃

var buf =Buffer.alloc(7);buf.write("12345678)
console.log(buf)//输出<Buffer 31 32 33 34 35 36 37>

5、数组初始化,通过索引找buffer内数组的值

var buf = Buffer.from([1,2,3,4]);
console.log(buf,buf[0])//<Buffer 01 02 03 04> 1
//如果数组内的值是小数,会舍弃小数点后面的值直接输出整数

6、buf.write(string,offset =0,length,encoding='utf8')用法,offset :偏移量,从第几个开始

var buf = Buffer.from('hello 你好');buf.length //12
buf.write("hi 你好") //回车输出9

buf.toString()//输出“hi 你好好”,会补齐长度12
buf.write(' hellohellohello',2,13)
buf.toString()//输出'hi hellohell'

7、 buf.copy(target,tStart,sStart,sEnd = buffer.length)用法;target:要被复制的目标buffer,tStart:被复制的目标buffer中从第几个字节开始写,默认0;sStart:原buffer里面获取数据的时候的开始位置,默认为0;sEnd 用来指定从复制源对象里面获取数据的结束位置,默认是复制源的长度

var buf =Buffer.from("hello 12345")
buf.length //11
var buf2 =Buffer.alloc(5)
buf.copy(buf2)//5
buf2.toString()//hello
buf.copy(buf2,0,6,11)//5
buf2.toString()//12345

8、buffer.compare(otherBuffer);buffer与otherBuffer相同返回0,如果 otherBuffer排在 buf 前面,则返回 1 。如果 otherBuffer排在 buf 后面,则返回 -1 

9、buffer.slice(start,end);被裁减的buffer的起始和终点位置

10、buffer.equals(otherBuffer);buffer与otherBuffer具有相同的字节数时返回true,否则false

11、buffer.fill(value,offset,end);value:填充的buf值,offset跳过的字节数,默认为0,end结束的长度

12、Buffer对象与JSON对象之间的转换:在Node.js中可以使用JSON.stringify()方法将Buffer对象中保存的数据转换成字符串。也可以使用JSON.parse()方法将一个经过转换之后的字符串变回一个数组。

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

console.log(json);// 输出: {"type":"Buffer","data":[1,2,3,4,5]}
console.log(JSON.parse(json));//输出{ type: 'Buffer', data: [ 1, 2, 3, 4, 5 ] }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值