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

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

offset <Integer> 开始写入 string 的位置。默认: 0

length <Integer> 要写入的字节数。默认: buf.length – offset

encoding <String> string 的字符编码。默认: ‘utf8’;返回: <Integer> 写入的字节数

根据 encoding 的字符编码写入 string 到 buf 中的 offset 位置。 length 参数是写入的字节数。 如果 buf 没有足够的空间保存整个字符串,则只会写入 string 的一部分。 只部分解码的字符不会被写入


var buf = Buffer.alloc(5);

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

var len = buf.write('test',1,3);

console.log(buf);//<Buffer 00 74 65 73 00>

console.log(len);/3

由于可以不断写入内容到Buffer对象中,并且每次写入可以指定编码,所以Buffer对象中可以存在多种编码转化后的内容。需要小心的是,每种编码所用的字节长度不同,将Buffer反转回字符串时需要谨慎处理

toString()

实现Buffer向字符串的转换也十分简单,Buffer对象的toString()可以将Buffer对象转换为字符串

buf.toString([encoding], [start], [end])

encoding – 使用的编码。默认为 ‘utf8’

start – 指定开始读取的索引位置,默认为 0

end – 结束位置,默认为缓冲区的末尾

返回 – 解码缓冲区数据并使用指定的编码返回字符串


var buf =Buffer.alloc(26);
for (var i = 0 ; i < 26 ; i++) {
buf[i] = i + 97;
}
console.log( buf.toString('ascii'));//abcdefghijklmnopqrstuvwxyz
console.log( buf.toString('ascii',0,5));//abcde
console.log( buf.toString('utf8',0,5));//abcde
console.log( buf.toString(undefined,0,5));//abcde

toJSON()

将 Node Buffer 转换为 JSON 对象

buf.toJSON()

返回 buf 的 JSON 格式


var buf = Buffer.from('test');
var json = buf.toJSON(buf);
console.log(json);//{ type: 'Buffer', data: [ 116, 101, 115, 116 ] }

isEncoding()

目前比较遗憾的是,Node的Buffer对象支持的编码类型有限,只有少数的几种编码类型可以在字符串和Buffer之间转换。为此,Buffer提供了一个isEncoding()函数来判断编码是否支持转换

Buffer.isEncoding(encoding)

将编码类型作为参数传入上面的函数,如果支持转换返回值为true,否则为false。很遗憾的是,在中国常用的GBK、GB2312和BIG-5编码都不在支持的行列中


console.log(Buffer.isEncoding('utf8'));//true

console.log(Buffer.isEncoding('gbk'));//false

Buffer类方法
Buffer.byteLength(string[, encoding])

Buffer.byteLength()方法返回一个字符串的实际字节长度。 这与 String.prototype.length 不同,因为那返回字符串的字符数