2**8-1;
0o 8进制
将任意进制字符串转换为十进制
// 创建一个长度为 10、且用 0 填充的 Buffer。
const buf1 = Buffer.alloc(10);
// 创建一个长度为 10、且用 0x1 填充的 Buffer。
const buf2 = Buffer.alloc(10, 1);
// 创建一个长度为 10、且未初始化的 Buffer。
const buf3 = Buffer.allocUnsafe(10);
// 创建一个包含 [0x1, 0x2, 0x3] 的 Buffer。
const buf4 = Buffer.from([1, 2, 3]);
正常情况下为0-255之间;
const buf5 = Buffer.from('珠峰培训');
手动初始化,擦干净桌子,将buffer内容清0
buffer.fill(0);
buf.write(string[, offset[, length]][, encoding])
buffer.write('珠',0,3,'utf8');
buffer.write('峰',3,3,'utf8'); //珠峰
var buf = new Buffer(4);
buf.writeInt8(0,0);
buf.writeInt8(16,1);
buf.writeInt8(32,2);
buf.writeInt8(48,3);//16*3*/
console.log(buf);
console.log(buf.readInt8(0));
console.log(buf.readInt8(1));
console.log(buf.readInt8(2));
console.log(buf.readInt8(3));
不同的CPU有不同的字节序类型,这些字节序是指整数在内存中保存的顺序。
let buf3 = new Buffer(4);
buf3.writeInt16BE(2**8,0);
console.log(buf3);//<Buffer 01 00 00 00>
console.log(buf3.readInt16BE(0));
buf3.writeInt16LE(2**8,2);
console.log(buf3);//<Buffer 01 00 00 01>
console.log(buf3.readInt16LE(2));
buf.toString([encoding[, start[, end]]])
buffer.toString('utf8',3,6)
buf.slice([start[, end]])
let newBuf = buffer.slice(0,4);
let {StringDecoder} = require('string_decoder');
let sd = new StringDecoder();
let buffer = new Buffer('珠峰');
console.log(sd.write(buffer.slice(0,4)));
console.log(sd.write(buffer.slice(4)));
复制Buffer 把多个buffer拷贝到一个大buffer上
buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])
let buf5 = Buffer.from('珠峰培训');
let buf6 = Buffer.alloc(6);
buf5.copy(buf6,0,0,4);
buf5.copy(buf6,3,3,6);
//buf6=珠峰
Buffer.prototype.copy2 = function(targetBuffer,targetStart,sourceStart,sourceEnd){
for(let i=sourceStart;i<sourceEnd;i++){
target[targetStart+i] = this[i];
}
}
Buffer.concat(list[, totalLength])
let buf1 = Buffer.from('珠');
let buf2 = Buffer.from('峰');
let buf3 = Buffer.concat([buf1,buf2],3);
console.log(buf3.toString());
Buffer.concat2 = function (list = [], total = list.reduce((len, item) => len + item.length, 0)) {
if (list.length == 1)
return list[0];
let result = Buffer.alloc(total);
let pos = 0;
for (let bf of list) {
for (let b of bf) {
if (pos < total)
result[pos++] = b;
else
return result;
}
}
return result;
}
Buffer.myConcat = function(list,totalLength=list.reduce((len,item)=>len+item.length,0)){
if(list.length==0)
return list[0];
let newBuffer = Buffer.alloc(totalLength);
let offset = 0;
for(let i=0;i<list.length;i++){
if(offset+list[i].length>totalLength){
list[i].copy(newBuffer,offset,0,totalLength-offset);
break;
}else{
list[i].copy(newBuffer,offset,0,list[i].length);
offset+=list[i].length;
}
}
return newBuffer;
}
判断是否是buffer
Buffer.isBuffer
获取字节长度(显示是字符串所代表buffer的长度)
Buffer.byteLength("珠峰");
buffer.length;
const CHARTS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
function transfer(str){
let buf = Buffer.from(str);
let result = '';
for(let b of buf){
result += b.toString(2);
}
return result.match(/(\d{6})/g).map(val=>parseInt(val,2)).map(val=>CHARTS[val]).join('');
}
let r = transfer('珠');//54+g