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