您的位置:首页 > Web前端 > Node.js

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

2017-03-22 16:26 609 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: