JavaScript不足

JavaScript原生支持Unicode,并且对Unicode非常友好。但是,纯JavaScript对于处理二进制数据却是一个弱项。但是node既然是后端,那么不免要和二进制数据打交道,这样Buffer类就应运而生了。

全局变量

与一般的node模块不同,Buffer在node中是全局存在的(这也说明了Buffer模块在node中的重要性)。既然Buffer是全局变量,那么我们不需要显示的引用,直接使用即可:

var bfData = new Buffer(4);
格式转换

我们在Buffer与JavaScript字符串之间转换时,需要显示的指定格式。当前支持的格式有:

  • ascii 目前只支持7比特的ASCII数据(需要注意的是,在此编码中,node会把null转换成空格)
  • utf8
  • utf16le、ucs2
  • base64
  • hex
var bfASCII = new Buffer('abcd', 'ascii');
console.log(bfASCII); // <Buffer 61 62 63 64>
console.log(bfASCII.toString()); // abcd

var bfHex = new Buffer('b4c127c3d7', 'hex');
console.log(bfHex); // <Buffer b4 c1 27 c3 d7>
console.log(bfHex.toString('hex')); // b4c127c3d7
创建一个Buffer实例

我们可以有3中创建Buffer实例的方法。

  • new Buffer(size) 创建指定大小的Buffer实例
var bfSize = new Buffer(6);

bfSize.write('abcdef', 0, 6, 'utf8');

console.log(bfSize); // <Buffer 61 62 63 64 65 66>
console.log(bfSize.toString('utf8')); // abcdef
  • new Buffer(array) 给定指定数组创建Buffer实例
var bfArray = new Buffer(['97', 98]);

console.log(bfArray.toString('utf8')); // ab
  • new Buffer(str, [encoding]) 使用指定的字符串和编码格式(默认为utf8)创建新的Buffer实例
var bfStr = new Buffer('你好', 'utf8');

console.log(bfStr); // <Buffer e4 bd a0 e5 a5 bd>
console.log(bfStr.toString('utf8')); // 你好
Buffer.isEncoding(encoding)

此方法可以方便的知晓给定的字符编码是否在node支持范围内:

console.log(Buffer.isEncoding('utf8')); // true
console.log(Buffer.isEncoding('ascii')); // true
console.log(Buffer.isEncoding('hex')); // true
console.log(Buffer.isEncoding('base64')); // true
console.log(Buffer.isEncoding('ucs2')); // true
console.log(Buffer.isEncoding('binary')); // true
console.log(Buffer.isEncoding('utf108')); // false
buf.write(string, [offset], [length], [encoding])

将指定字符串写入到Buffer实例,并且可以指定从偏移量、写入长度和编码

var bfWrite = new Buffer(6);

bfSize.write('abcdef', 0, 5, 'utf8');

console.log(bfWrite); // <Buffer 61 62 63 64 65 00>
console.log(bfWrite.toString('utf8')); // abcde
buf.toString([encoding], [start], [end])

将Buffer实例转换成字符串

var bfToStr = new Buffer(2);

bfToStr[0] = 108;
bfToStr[1] = 109;

console.log(bfToStr.toString('ascii')); // lm
未完待续

results matching ""

    No results matching ""