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

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

console.log(buffer2);//<Buffer 65 73>
console.log(buffer2.toString());//'es'

[注意]修改这个新建的 Buffer 切片,也会同时修改原始的 Buffer 的内存,因为这两个对象所分配的内存是重叠的


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

buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])

该方法用于拷贝 buf 的一个区域的数据到 target 的一个区域,即便 target 的内存区域与 buf 的重叠

target <Buffer> | <Uint8Array> 要拷贝进的 Buffer 或 Uint8Array

targetStart <Integer> target 中开始拷贝进的偏移量。 默认: 0

sourceStart <Integer> buf 中开始拷贝的偏移量。 当 targetStart 为 undefined 时忽略。 默认: 0

sourceEnd <Integer> buf 中结束拷贝的偏移量(不包含)。 当 sourceStart 为 undefined 时忽略。 默认: buf.length

返回: <Integer> 被拷贝的字节数


var buffer1 =Buffer.from('test');
var buffer2 = Buffer.alloc(5);
var len = buffer1.copy(buffer2,1,3);
console.log(buffer1);//<Buffer 74 65 73 74>
console.log(buffer2);//<Buffer 00 74 00 00 00>
console.log(len);//1

buf.compare(target[, targetStart[, targetEnd[, sourceStart[, sourceEnd]]]])

该方法比较 buf 与 target,返回表明 buf 在排序上是否排在 target 之前、或之后、或相同。 对比是基于各自 Buffer 实际的字节序列

target <Buffer> 要比较的 Buffer

targetStart <Integer> target 中开始对比的偏移量。 默认: 0

targetEnd <Integer> target 中结束对比的偏移量(不包含)。 当 targetStart 为 undefined 时忽略。 默认: target.length

sourceStart <Integer> buf 中开始对比的偏移量。 当 targetStart 为 undefined 时忽略。 默认: 0

sourceEnd <Integer> buf 中结束对比的偏移量(不包含)。 当 targetStart 为 undefined 时忽略。 默认: buf.length

返回: <Integer>

如果 target 与 buf 相同,则返回 0 

如果 target 排在 buf 前面,则返回 1 

如果 target 排在 buf 后面,则返回 -1 


var buf1 = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8, 9]);
var buf2 = Buffer.from([5, 6, 7, 8, 9, 1, 2, 3, 4]);
// 输出: 0(buf2中的1234对比buf2中的1234)
console.log(buf1.compare(buf2, 5, 9, 0, 4));
// 输出: -1(buf2中的567891对比buf1中的56789)
console.log(buf1.compare(buf2, 0, 6, 4));
// 输出: 1(buf2中的1对比buf2中的6789)