Node.js API实例讲解——Buffer的静态方法
Buffer.isEncoding这个方法是判断编码方式是否被支持,return true/false。前面章节我们知道了 node.js 支持的编码方式。
Buffer的静态方法
Buffer.isEncoding(编码方式);
这个方法是判断编码方式是否被支持,return true/false
前面章节我们知道了 node.js 支持的编码方式。下面做几个例子。
例1 this
console.log(Buffer.isEncoding("gb2312")); // 打印 false 。 即使gb2312是编码方式,但不被node.js支持 console.log(Buffer.isEncoding("utf8")); // true console.log(Buffer.isEncoding("ucs2")); // true console.log(Buffer.isEncoding("utf16le")); // true console.log(Buffer.isEncoding("ascii")); // true console.log(Buffer.isEncoding("base64")); // true console.log(Buffer.isEncoding("hex")); // true
Buffer.isBuffer(obj)判断是否obj是Buffer类型对象
例1fuck
var o1 = "",o2 = new Buffer(1); console.log(Buffer.isBuffer(o1)); // false console.log(Buffer.isBuffer(o2)); // true
Buffer.byteLength(string, [encoding]) 获得特定编码下一个字符串所占用btye的数量。
这里可能会产生一个误解;得到的是占用的bytes数而不是字符数量。
还应注意的是,字符串与编码应该是正确的对应关系,比如中文用 ascii 编码方式,显然得不到正确的 byteLength;而base64和hex的编码也要输入对应的字符串形式。
[encoding] 是可选参数,默认 utf8
例1
var str = "你好"; var buf = new Buffer(str); console.log(Buffer.byteLength(str)); // 6 var hexStr = buf.toString("hex"); // 转换为 hex编码形式 console.log(hexStr); // e4bda0e5a5bd console.log(Buffer.byteLength(hexStr,"hex")); // 6
这个例子我们会发现 utf8、hex、base64 编码只要原始字符串一致,那么占用的byte数量就一致,这个说明,hex和base64会先转换为utf8。
例2,ucs2与utf8占用的byte length是不相同的。
var str = "你好"; var buf = new Buffer(str); console.log(Buffer.byteLength(str,"utf8")); // 6 console.log(Buffer.byteLength(str,"ucs2")); // 4
Buffer.concat(list, [totalLength]) 合并多个buffer对象,并返回一个新的buffer对象。
list 是一个数组,数组值必须是Buffer对象。
totalLength[可选] 指定合并后buffer对象的总长。
如果 list只有一个buffer,直接返回这个buffer对象,并且totalLength参数失效。
如果 list有多个buffer,会重新创建一个新的buffer对象。
sexlist有多个buffer情况下,如果不指定totalLength,那么会循环多个buffer得到其长度,这增加了多余的计算。所以明确指定totalLength更快。
下面的例子很重要,讲解了各种的使用情况。
例
var tb; // list有一个Buffer对象,total会失效。 tb = Buffer.concat([new Buffer(10)],20) console.log(tb.length); // 10 // list有多个Buffer对象,不指定totalLength tb = Buffer.concat([ new Buffer(10) , new Buffer(5) ]); console.log(tb.length); // 15 // list有多个Buffer对象,指定totalLength tb = Buffer.concat([ new Buffer(10) , new Buffer(5) ], 20); console.log(tb.length); // 20 // list有多个Buffer对象,指定totalLength // list内的Buffer对象总和的byte length > totalLength // 这种情况下,新合并的tb长度等于totalLength tb = Buffer.concat([ new Buffer(10) , new Buffer(222) ], 20); console.log(tb.length); // 20 // 如果多个buffer合并,list的第一个 buffer.length >= totalLength // 这种情况下就会抛出异常 try{ tb = Buffer.concat([ new Buffer(20) , new Buffer(222) ], 20); console.log(tb.length); }catch(e){ console.log("第一个buffer.length >= totalLength"); }
很赞哦! ( 0
)