node.JS二进制操作模块buffer对象使用方法详解

2020-06-17 08:01:05易采站长站整理

string <String> | <Buffer> | <TypedArray> | <DataView> | <ArrayBuffer> 要计算长度的值

encoding <String> 如果 string 是字符串,则这是它的字符编码。 默认: ‘utf8’

返回: <Integer> string 包含的字节数


var str = '火柴';

var buf = Buffer.from(str);

console.log(str.length);//2

console.log(buf.length);//6

console.log(buf.byteLength);//6

Buffer.compare(buf1, buf2)

该方法用于比较 buf1 和 buf2 ,通常用于 Buffer 实例数组的排序。 相当于调用 buf1.compare(buf2) 

buf1 <Buffer>

buf2 <Buffer>

Returns: <Integer>


var buf1 = Buffer.from('1234');

var buf2 = Buffer.from('0123');

var arr = [buf1, buf2];

var result = Buffer.compare(buf1,buf2);

console.log(result);//1

console.log(arr.sort());//[ <Buffer 30 31 32 33>, <Buffer 31 32 33 34> ]

Buffer.concat(list[, totalLength])

该方法返回一个合并了 list 中所有 Buffer 实例的新建的 Buffer

list <Array> 要合并的 Buffer 实例的数组

totalLength <Integer> 合并时 list 中 Buffer 实例的总长度

返回: <Buffer>

如果 list 中没有元素、或 totalLength 为 0 ,则返回一个新建的长度为 0 的 Buffer 。如果没有提供 totalLength ,则从 list 中的 Buffer 实例计算得到。 为了计算 totalLength 会导致需要执行额外的循环,所以提供明确的长度会运行更快


var buf1 = Buffer.alloc(10);

var buf2 = Buffer.alloc(14);

var buf3 = Buffer.alloc(18);

var totalLength = buf1.length + buf2.length + buf3.length;

console.log(totalLength);//42

var bufA = Buffer.concat([buf1, buf2, buf3], totalLength);

console.log(bufA);//<Buffer 00 00 00 00 ...>

console.log(bufA.length);//42

Buffer.isBuffer(obj)

如果 obj 是一个 Buffer 则返回 true ,否则返回 false


var buf = Buffer.alloc(5);
var str = 'test';
console.log(Buffer.isBuffer(buf));//true
console.log(Buffer.isBuffer(str));//false

实例方法
buf.slice([start[, end]])

该方法返回一个指向相同原始内存的新建的 Buffer,但做了偏移且通过 start 和 end 索引进行裁剪

start <Integer> 新建的 Buffer 开始的位置。 默认: 0

end <Integer> 新建的 Buffer 结束的位置(不包含)。 默认: buf.length

返回: <Buffer>


var buffer1 =Buffer.from('test');
console.log(buffer1);//<Buffer 74 65 73 74>
var buffer2 = buffer1.slice(1,3);