标签:支持 二进制 ++ 整数 类型 字节序 输出 因此 strcmp
参考https://www.runoob.com/nodejs/nodejs-buffer.html
Buffer类时Node.js的一个核心库。一个Buffer对象类似于一个整数数组,但它对应于V8引擎的堆内存之外的一块原始内存(原生内存/堆外内存/直接内存)。
建议直接使用Buffer.from()接口去创建Buffer对象。
Buffer实例一般用于表示编码字符的序列,比如UTF-8、UCS2、Base64或16进制编码的数据。通过显式的字符编码,就可以实现Buffer实例<=>JavaScript字符串之间的相互转换。
const buf = Buffer.from(‘runoob‘, ‘ascii‘);
// 输出72756e6f6f62
console.log(buf.toString(‘hex‘));
// 输出cnVub29i
console.log(buf.toString(‘base64‘));
Node.js目前支持的字符编码包括:
7种方法创建Buffer实例:
// 创建一个长度为10,且用0填充的buffer(默认用0填充)
const buf1 = Buffer.alloc(10);
// 创建一个长度为10,且用0x1填充的buffer
const buf2 = Buffer.alloc(10, 1);
// 创建一个长度为10,且未初始化的buffer
// 这个方法比Buffer.alloc()快
// 但是返回的实例种可能包含旧数据
// 因此需要用fill()或write()重写
const buf3 = Buffer.allocUnsafe(10);
// 创建一个包含[0x1, 0x2, 0x3]的buffer
const buf4 = Buffer.from([1, 2, 3]);
// 创建一个包含UTF-8字节[0x74, 0xc3, 0xa9, 0x73, 0x74]的buffer
const buf5 = Buffer.from(‘test‘);
// 创建一个包含Latin-1字节[0x74, 0xe9, 0x73, 0x74]的buffer
cosnt buf6 = Buffer.from(‘test‘, ‘latin1‘);
buffer.write(string[,offset[,length]][,encoding])
返回实际写入的空间大小。
var buf = Buffer.alloc(256);
var len = buf.write(‘test‘);
console.log(‘写入字节数:‘+len);
结果:
写入字节数:4
buf.toString([encoding[,start[,end]]])
返回指定编码的字符串。
var buf = Buffer.alloc(26);
for( var i=0; i<26; i++){
buf[i] = i+97;
}
console.log(buf.toString(‘ascii‘));//使用‘ascii‘编码输出所有字符
console.log(buf.toString(‘ascii‘, 0, 5));//使用‘ascii‘编码输出前5个字符
console.log(buf.toString(‘utf8‘, 0, 5));//使用‘utf8‘编码输出前5个字符
console.log(buf.toString(undefined, 0, 5));// 使用默认的‘utf8‘编码输出前5个字符
结果:
abcdefghijklmnopqrstuvwxyz
abcde
abcde
abcde
buf.toJSON()
效果等同JSON.stringfy(),其实是JSON.stringfy()调用了buf.toJSON()。
返回JSON化的JSON对象。
const buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5]);
const json = JSON.stringify(buf);
// 输出:{"type":"Buffer","data":[1,2,3,4,5]}
console.log(json);
const copy = JSON.parse(json, (key, value)=>{
return value && value.type===‘Buffer‘?
Buffer.from(value.data):
value;
});
// 输出:<Buffer 01 02 03 04 05>
console.log(copy);
结果:
{"type":"Buffer","data":[1,2,3,4,5]}
<Buffer 01 02 03 04 05>
Buffer.concat(list[,totalLength])
返回一个最终合并的新Buffer对象。
var buf1 = Buffer.from(‘菜鸟教程‘);
var buf2 = Buffer.from(‘www.runoob.com‘);
var buf3 = Buffer.concat([buf1, buf2]);
console.log(buf3.toString());
结果:
菜鸟教程www.runoob.com
buf.compare(otherBuffer);
返回一个数字,类似于C语言中的strcmp()函数。0表示相同。
var buf1 = Buffer.from(‘ABC‘);
var buf2 = Buffer.from(‘ABCD‘);
var result = buf1.compare(buf2);
console.log(result);
结果:
-1
buf.copy(targetBuffer[, targetStart[, sourceStart[, sourceEnd]]])
无
var buf1 = Buffer.from(‘ABcdEFG‘);
var buf2 = Buffer.from(‘CD‘);
buf2.copy(buf1, 2);
console.log(buf1.toString());
结果:
ABCDEFG
buf.slice([start[, end]])
返回一个新的Buffer对象,和旧的指向同一块内存,只是长度不同。
var buf1 = Buffer.from(‘abCDEFG‘);
var buf2 = buf1.slice(2, 7);
console.log(buf2.toString());
结果:
CDEFG
buf.length;
返回Buffer对象所占据的内存长度。
var buffer = Buffer.from(‘www.runoob.com‘);
// 缓冲区长度
console.log("buffer length: " + buffer.length);
结果:
buffer length: 14
标签:支持 二进制 ++ 整数 类型 字节序 输出 因此 strcmp
原文地址:https://www.cnblogs.com/pangqianjin/p/14191931.html