node.js学习(十三、Buffer模块)

Buffer主要用来处理二进制流,适用于tcp流或文件流的处理。
Buffer跟其他语言的int[]数组类似。Buffer 的大小在其创建时就已确定,且不能调整大小。
Buffer为全局对象,无需require即可使用。

1.Buffer.alloc(size[, fill[, encoding]])
初始化size个字节的Buffer。
size 必须小于或等于 buffer.kMaxLength 的值【32位系统最大为1GB,即(2^30)-1;64位系统最大值为2GB,即(2^31)-1】,否则会抛出 RangeError 错误。 如果 size 小于或等于0,则创建一个长度为0的 Buffer 。
fill | | 用来预填充新建的 Buffer 的值。所有字节都是填充的值。
encoding 如果 fill 是字符串,则该值是它的字符编码。 默认: ‘utf8’

const buf1 = Buffer.alloc(10);
console.log(buf1); 

const buf2 = Buffer.alloc(10,"1");
console.log(buf2); 

const buf3 = Buffer.alloc(10,1);
console.log(buf3); 

const buf4 = Buffer.alloc(10,buf2);
console.log(buf4);


//输出
<Buffer 00 00 00 00 00 00 00 00 00 00>
<Buffer 31 31 31 31 31 31 31 31 31 31>
<Buffer 01 01 01 01 01 01 01 01 01 01>
<Buffer 31 31 31 31 31 31 31 31 31 31>

2.Buffer.allocUnsafe(size)
与alloc类似,区别只是allocUnsafe调用时,buffer被填充的不一定全是0.

const buf5 = Buffer.allocUnsafe(5);
console.log(buf5);
buf5.fill(0);
console.log(buf5);

//输出
<Buffer 00 51 b3 8e f7>
<Buffer 00 00 00 00 00>

3.Buffer.byteLength(string[, encoding])
获取字符串的字节长度


console.log(Buffer.byteLength(1));
console.log(Buffer.byteLength("1"));
console.log(Buffer.byteLength("aGVsbG8gd29ybGQ="));
console.log(Buffer.byteLength("aGVsbG8gd29ybGQ=","base64"));
console.log("\u00bd + \u00bc = \u00be",Buffer.byteLength("\u00bd + \u00bc = \u00be=","utf-8"));

//输出
1
1
16 (未加编码以原始字符数计算)
11
½ + ¼ = ¾ 12   (utf8字符占2字节*3 空格占一字节*4 其他字符占1字节*2

4.Buffer.compare(buf1, buf2)
比较两个buffer

const buf1 = Buffer.from('a');
const buf2 = Buffer.from('b');
const buf3 = Buffer.from('c');
console.log(Buffer.compare(buf2,buf1));
console.log(Buffer.compare(buf2,buf2));
console.log(Buffer.compare(buf2,buf3));
//输出
1     //大
0     //等
-1    //小

5.Buffer.concat(list[, totalLength])
拼接多个buffer

6.Buffer.from(array)
通过array 创建一个新的 Buffer 。
array 数值数组

7.Buffer.from(arrayBuffer[, byteOffset[, length]])
arrayBuffer TypedArray 或 ArrayBuffer 的 .buffer 属性
byteOffset 从 arrayBuffer 开始拷贝的位置。 默认: 0
length 从 arrayBuffer 拷贝多少字节。 默认: arrayBuffer.length - byteOffset
当传入一个 TypedArray 实例的 .buffer 属性的引用时,这个新建的 Buffer 会像 TypedArray 那样共享同一分配的内存

8.Buffer.from(buffer)
从某个buffer中拷贝数据,返回新的buffer。不共享内存。

9.Buffer.from(string[, encoding])
通过字符串创建buffer

10.buf.slice([start[, end]])
截取buffer,内存共享。

11.buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])
target 要拷贝进的 Buffer 。
targetStart target 中开始拷贝进的偏移量。 默认: 0
sourceStart buf 中开始拷贝的偏移量。 当 targetStart 为 undefined 时忽略。 默认: 0
sourceEnd buf 中结束拷贝的偏移量(不包含)。 当 sourceStart 为 undefined 时忽略。 默认: buf.length
返回: 被拷贝的字节数。
拷贝 buf 的一个区域的数据到 target 的一个区域,即便 target 的内存区域与 buf 的重叠。

let buffer=Buffer.from("abc") ;
let buf2=Buffer.alloc(1);
buffer.copy(buf2);
console.log(buf2.toString())

//输出
a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值