buffer

对象 buffer

二进制数据缓存对象,用于 io 读写的数据处理

Buffer 对象为全局基础类,在任何时候都可以直接以 new Buffer(…) 创建:

1
var buf = new Buffer();

静态函数

isBuffer

检测给定的变量是否是 Buffer 对象

1
Buffer.isBuffer(v);

调用参数:

返回结果:

实例:

1
2
3
4
5
6
exports.hi = v => {
var buf = new Buffer("abcd");
var str = "abcd"
console.log(Buffer.isBuffer(buf));
console.log(Buffer.isBuffer(str));
}

from

通过其他 Buffer 创建 Buffer 对象

1
Buffer.from(buffer,byteOffset,length);

调用参数:

返回结果:

实例:

1
2
3
4
exports.hi = v => {
var buf = Buffer.from(new Buffer("abcd"), 1, 2);
console.log(buf.toString());
}

通过字符串创建 Buffer 对象

1
Buffer.from(str,byteOffset,length);

调用参数:

返回结果:

实例:

1
2
3
4
exports.hi = v => {
var buf = Buffer.from("abcd", 0, 2);
console.log(buf.toString());
}

通过字符串创建 Buffer 对象

1
Buffer.from(str,codec);

调用参数:

返回结果:

实例:

1
2
3
4
exports.hi = v => {
var buf = new Buffer("厉害!", "utf8");
console.log(buf.toString());
}

concat

拼接多个缓存区中的数据

1
Buffer.concat(buflist,cutLength);

调用参数:

返回结果:

实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
exports.hi = v => {
var buf1 = new Buffer("abcd");
var buf2 = new Buffer("efg");
var buf3 = new Buffer();
var bufArray = [buf1];
var bufRes = Buffer.concat(bufArray);
console.log(bufRes.toString());

bufArray = [buf1, buf2];
bufRes = Buffer.concat(bufArray);
console.log(bufRes.toString());

bufRes = Buffer.concat(bufArray, 6);
console.log(bufRes.toString());

buf1 = new Buffer([0x31, 0x32, 0x33, 0x34]);
buf2 = new Buffer([0x35, 0x36, 0x37, 0x38]);
bufArray = [buf1, buf2];
bufRes = Buffer.concat(bufArray);
console.log(bufRes.toString());

var buf2 = Buffer.concat([]);
console.log(buf2.length);
}

alloc

分配一个指定长度的新缓存区。如果大小为0,将创建一个零长度的缓存区。

1
Buffer.alloc(size,fill,codec);

调用参数:

返回结果:

实例:

1
2
3
4
exports.hi = v => {
var buf1 = Buffer.alloc(10, 0, "utf8");
console.log(buf1.toString());
}

分配一个指定长度的新缓存区。如果大小为0,将创建一个零长度的缓存区。

1
Buffer Buffer.alloc(size,fill,codec);

调用参数:

返回结果:

实例:

1
2
3
4
5
6
exports.hi = v => {
var buf1 = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64');
var buf2 = Buffer.alloc(16, 'aGVsbG8gd29ybGQ=', 'base64');
console.log(buf1.toString());
console.log(buf2.toString());
}

分配一个指定长度的新缓存区。如果大小为0,将创建一个零长度的缓存区。

1
Buffer.alloc(size,fill,codec);

调用参数:

返回结果:

实例:

1
2
3
4
5
6
exports.hi = v => {
var buf1 = Buffer.alloc(11, new Buffer('aGVsbG8gd29ybGQ='), 'base64');
var buf2 = Buffer.alloc(16, new Buffer('aGVsbG8gd29ybGQ='), 'base64');
console.log(buf1.toString());
console.log(buf2.toString());
}

allocUnsafe

分配一个指定长度的新缓存区。如果大小为0,将创建一个零长度的缓存区。

1
Buffer.allocUnsafe(size);

调用参数:

返回结果:

实例:

1
2
3
4
exports.hi = v => {
var buf1 = Buffer.allocUnsafe(10);
console.log(buf1.length);
}

allocUnsafeSlow

分配一个指定长度的新缓存区。如果大小为0,将创建一个零长度的缓存区。

1
Buffer.allocUnsafeSlow(size);

调用参数:

返回结果:

实例:

1
2
3
4
exports.hi = v => {
var buf1 = Buffer.allocUnsafeSlow(10);
console.log(buf1.length);
}

isEncoding

检测编码格式是否被支持

1
Buffer.isEncoding(codec);

调用参数:

返回结果:

实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
exports.hi = v => {
console.log(Buffer.isEncoding('utf8')); // true
console.log(Buffer.isEncoding('utf-8')); // true
console.log(Buffer.isEncoding('gbk')); // false
console.log(Buffer.isEncoding('gb2312')); // false
console.log(Buffer.isEncoding('hex')); // true
console.log(Buffer.isEncoding('base64')); // true
console.log(Buffer.isEncoding('jis')); // false
console.log(Buffer.isEncoding('aaabbbccc')); // false
console.log(Buffer.isEncoding('binary')); // false
console.log(Buffer.isEncoding('latin1')); // false
console.log(Buffer.isEncoding('big5')); // false
}

成员属性

length

Integer, 获取缓存对象的尺寸

1
readonly Integer Buffer.length;

成员函数

Buffer

缓存对象构造函数

1
Buffer.Buffer(Array datas);

调用参数:

1
2
3
4
exports.hi = v => {
var buf = new Buffer([0x31, 0x32, 0x33, 0x34])
console.log(buf.toString());
}

缓存对象构造函数

1
Buffer.Buffer(ArrayBuffer datas);

调用参数:

1
2
3
4
5
6
7
exports.hi = v => {
var arr = new Uint16Array(2);
arr[0] = 5000;
arr[1] = 4000;
var buf = new Buffer(arr.buffer);
console.log(buf.hex());
}

缓存对象构造函数

1
Buffer.Buffer(TypedArray datas);

调用参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
exports.hi = v => {
var arr = new Uint8Array(2);
arr[0] = 50;
arr[1] = 40;
var buf = new Buffer(arr);
console.log(buf.hex());

var arr = new Uint16Array(2);
arr[0] = 5000;
arr[1] = 4000;
var buf = new Buffer(arr);
console.log(buf.hex());

var arr = new Uint8Array([0x10, 0x20, 0x30]);
var arr1 = new Uint8Array(arr.buffer, 1, 2);
var buf = new Buffer(arr1);
console.log(buf.hex());
}

缓存对象构造函数

1
Buffer.Buffer(ArrayBufferView datas);

调用参数:

1
2
3
4
5
6
7
exports.hi = v => {
var arr = new DataView(new ArrayBuffer(2));
arr.setInt8(0, 0x10);
arr.setInt8(1, 0x20);
var buf = new Buffer(arr);
console.log(buf.hex());
}

缓存对象构造函数

1
Buffer.Buffer(Buffer buffer);

调用参数:

1
2
3
4
exports.hi = v => {
var buf = new Buffer(new Buffer("abcd"));
console.log(buf.toString());
}

缓存对象构造函数

1
2
Buffer.Buffer(String str,
String codec = "utf8");

调用参数:

1
2
3
4
exports.hi = v => {
var buf = new Buffer("abcd", "utf8");
console.log(buf.toString());
}

缓存对象构造函数

1
Buffer.Buffer(Integer size = 0);

调用参数:

实例:

1
2
3
4
exports.hi = v => {
var buf = new Buffer(100);
console.log(buf.length);
}

resize

修改缓存对象尺寸

1
Buffer.resize(Integer sz);

调用参数:

实例:

1
2
3
4
5
exports.hi = v => {
var buf = new Buffer("abcded");
buf.resize(10);
console.log(buf);
}

append

在缓存对象尾部写入一组二进制数据

1
Buffer.append(Buffer data);

调用参数:

实例:

1
2
3
4
5
6
exports.hi = v => {
var buf = new Buffer([0x31, 0x32, 0x33, 0x34]);
buf.append("abcd");
buf.append([0x31, 0x32, 0x33, 0x34]);
console.log(buf.toString());
}

在缓存对象尾部写入字符串,字符串将以 utf-8 格式写入

1
2
Buffer.append(String str,
String codec = "utf8");

调用参数:

实例:

1
2
3
4
5
6
exports.hi = v => {
var buf = new Buffer([0x31, 0x32, 0x33, 0x34]);
buf.append("3132", "hex");
buf.append("MTIzNA==", "base64");
console.log(buf.toString());
}

write

向缓存对象写入指定字符串,字符串默认为utf-8,越界时只写入部分数据

1
2
3
4
Integer Buffer.write(String str,
Integer offset = 0,
Integer length = -1,
String codec = "utf8");

调用参数:

返回结果:

实例:

1
2
3
4
5
exports.hi = v => {
var buf = new Buffer(10);
buf.write("abcd", 0, 4, 'utf8')
console.log(buf.toString('utf8', 0, 4));
}

向缓存对象写入指定字符串,字符串默认为utf-8,越界时只写入部分数据

1
2
3
Integer Buffer.write(String str,
Integer offset = 0,
String codec = "utf8");

调用参数:

返回结果:

实例:

1
2
3
4
5
exports.hi = v => {
buf = new Buffer(10);
buf.write("MTIzNA==", 0, "base64");
console.log(buf.toString("utf8", 0, 4));
}

向缓存对象写入指定字符串,字符串默认为utf-8,越界时只写入部分数据

1
2
Integer Buffer.write(String str,
String codec = "utf8");

调用参数:

返回结果:

实例:

1
2
3
4
5
exports.hi = v => {
buf = new Buffer(10);
buf.write("MTIzNA==", "base64");
console.log(buf.toString("utf8"));
}

fill

为 Buffer 对象填充指定内容数据

1
2
3
Buffer Buffer.fill(Integer v,
Integer offset = 0,
Integer end = -1);

调用参数:

返回结果:

实例:

1
2
3
4
5
exports.hi = v => {
var buf = new Buffer(10);
buf.fill(1);
console.log(buf.toString());
}

为 Buffer 对象填充指定内容数据

1
2
3
Buffer Buffer.fill(Buffer v,
Integer offset = 0,
Integer end = -1);

调用参数:

返回结果:

实例:

1
2
3
4
5
exports.hi = v => {
var buf = new Buffer(10);
buf.fill(new Buffer("abc"));
console.log(buf.toString());
}

为 Buffer 对象填充指定内容数据

1
2
3
Buffer Buffer.fill(String v,
Integer offset = 0,
Integer end = -1);

调用参数:

返回结果:

实例:

1
2
3
4
5
exports.hi = v => {
var buf = new Buffer(10);
buf.fill("abc");
console.log(buf.toString());
}

indexOf

返回某个指定数据在 Buffer 中首次出现的位置

1
2
Integer Buffer.indexOf(Integer v,
Integer offset = 0);

调用参数:

返回结果:

实例:

1
2
3
4
5
exports.hi = v => {
var buf = new Buffer([0x31, 0x32, 0x33, 0x34, 0x00]);
console.log(buf.indexOf(0x33));
console.log(buf.indexOf(0x00));
}

返回某个指定数据在 Buffer 中首次出现的位置

1
2
Integer Buffer.indexOf(String v,
Integer offset = 0);

调用参数:

返回结果:

实例:

1
2
3
4
5
exports.hi = v => {
var buf = new Buffer("cacdbfcde");
console.log(buf.indexOf("cd", 1));

}

compare

比较缓存区的内容

1
Integer Buffer.compare(Buffer buf);

调用参数:

返回结果:

实例:

1
2
3
4
5
6
exports.hi = v => {
var buf = new Buffer("abcd");
console.log(buf.compare(new Buffer("abcd")));
console.log(buf.compare(new Buffer("abc")));
console.log(buf.compare(new Buffer("abcde")));
}

copy

从源缓存对象区域拷贝数据到目标缓存对象区域

1
2
3
4
Integer Buffer.copy(Buffer targetBuffer,
Integer targetStart = 0,
Integer sourceStart = 0,
Integer sourceEnd = -1);

调用参数:

返回结果:

实例:

1
2
3
4
5
6
7
8
9
exports.hi = v => {
var buf1 = new Buffer([0x31, 0x32, 0x33]);
var arr = [0x34, 0x35, 0x36];

var buf2 = new Buffer(arr);
var sz = buf1.copy(buf2);
console.log(sz);
console.log(buf2.toString());
}

slice

返回一个新缓存对象,包含指定起始到缓存结尾的数据

1
Buffer Buffer.slice(Integer start = 0);

调用参数:

返回结果:

实例:

1
2
3
4
5
exports.hi = v => {
var buf = new Buffer(10);
buf.write("abcdefghih");
console.log(buf.slice(8).toString());
}

返回一个新缓存对象,包含指定范围的数据,若范围超出缓存,则只返回有效部分数据

1
2
Buffer Buffer.slice(Integer start,
Integer end);

调用参数:

返回结果:

实例:

1
2
3
4
5
6
exports.hi = v => {
var buf = new Buffer(10);
buf.write("abcdefghih");
console.log(buf.slice(0, 3).toString());
console.log(buf.slice(0, 11).toString());
}

join

把当前对象中的所有元素放入一个字符串

1
String Buffer.join(String separator = ",");

调用参数:

返回结果:

实例:

1
2
3
4
exports.hi = v => {
var a = new Buffer([192, 168, 0, 1]);
console.log(a.join('.'));
}

reverse

返回一个新缓存对象,包含当前对象数据的倒序

1
Buffer Buffer.reverse();

返回结果:

实例:

1
2
3
4
exports.hi = v => {
var a = new Buffer("abcd");
console.log(a.reverse().toString());
}

equals

比较当前对象与给定的对象是否相等

1
Boolean Buffer.equals(object expected);

调用参数:

返回结果:

实例:

1
2
3
4
5
exports.hi = v => {
var buf = new Buffer("abcd");
console.log(buf.equals(new Buffer("abcd")));
console.log(buf.equals(new Buffer("abc")));
}

hex

使用 16 进制编码缓存对象内容

1
String Buffer.hex();

返回结果:

base64

使用 base64 编码缓存对象内容

1
String Buffer.base64();

返回结果:

keys

返回全部二进制数据的数组

1
Iterator Buffer.keys();

返回结果:

values

返回全部二进制数据的数组

1
Iterator Buffer.values();

返回结果:

entries

返回包含对象数据 [index, byte] 对的迭代器

1
Iterator Buffer.entries();

返回结果:

toArray

返回全部二进制数据的数组

1
Array Buffer.toArray();

返回结果:

实例:

1
2
3
4
exports.hi = v => {
var buf = new Buffer("buffer");
console.log(buf.toArray());
}

toString

返回二进制数据的编码字符串

1
2
3
String Buffer.toString(String codec,
Integer offset = 0,
Integer end);

调用参数:

返回结果:

实例:

1
2
3
4
exports.hi = v => {
var buf = new Buffer([0x31, 0x32, 0x33, 0x34]);
console.log(buf.toString("utf8", 1, 3));
}

返回二进制数据的编码字符串

1
2
String Buffer.toString(String codec,
Integer offset = 0);

调用参数:

返回结果:

实例:

1
2
3
4
5
6
exports.hi = v => {
var buf = new Buffer([0x31, 0x32, 0x33, 0x34]);
console.log(buf.toString("utf8", 1));
console.log(buf.toString("hex", 2));
console.log(buf.toString("base64", 2));
}

返回二进制数据的 utf8 编码字符串

1
String Buffer.toString();

返回结果:

实例:

1
2
3
4
exports.hi = v => {
var buf = new Buffer([0x31, 0x32, 0x33, 0x34]);
console.log(buf.toString());
}

toJSON

返回对象的 JSON 格式表示,一般返回对象定义的可读属性集合

1
String Buffer.toJSON();

返回结果:

实例:

1
2
3
4
exports.hi = v => {
var buf = new Buffer("buffer");
console.log(buf.toJSON());
}