Buffer类 用于操作二进制数据流
Buffer类 是一个全局的类,是一个比较罕见的不需要 require(‘buffer’) 就可以使用的类。
new Buffer(size)
分配一个新的 buffer 大小是 size 的8位字节.new Buffer(array)
分配一个新的 buffer 使用一个8位字节 array 数组.new Buffer(str, [encoding])
str String类型 - 需要存入buffer的string字符串.
encoding String类型 - 使用什么编码方式,参数可选.
分配一个新的 buffer ,其中包含着给定的 str字符串. encoding 编码方式默认是:’utf8’.buf[index]
获取或者设置在指定index索引位置的8位字节。这个值是指单个字节,所以这个值必须在合法的范围,16进制的0x00 到0xFF,或者0 到255。
var bf = new Buffer('buffer', 'utf-8');
console.log(bf);
for (var i=0; i<bf.length; i++) {
//console.log( bf[i].toString(16) );
console.log( String.fromCharCode( bf[i] ) );
}*/
fromCharCode() 可接受一个指定的 Unicode 值,然后返回一个字符串。
var str1 = 'test';
var bf1 = new Buffer(str1);
console.log(str1.length); //4
console.log(bf1.length); //4
var str2 = '测试';
var bf2 = new Buffer(str2);
console.log(str2.length); //2
console.log(bf2.length); //6(1个中文3个字节)
buf.write(string, [offset], [length], [encoding])
buf.write(要写入的字符串,从Buffer对象中的第几位开始写入,写入的字符串长度,写入的字符串的编码)
-string String类型 - 将要被写入 buffer 的数据
-offset Number类型, 可选参数, 默认: 0
-length Number类型, 可选参数, 默认: buffer.length - offset
-encoding String类型, 可选参数, 默认: ‘utf8’buf.toString([encoding], [start], [end])
-encoding String类型, 可选参数, 默认: ‘utf8’
-start Number类型, 可选参数, 默认: 0
-end Number类型, 可选参数, 默认: buffer.lengthbuf.toJSON()
返回一个 JSON表示的Buffer实例。JSON.stringify将会默认调用来字符串序列化这个Buffer实例。buf.slice([start], [end])
-start Number类型, 可选参数, 默认: 0
-end Number类型, 可选参数, 默认: buffer.length
返回一个新的buffer,这个buffer将会和老的buffer引用相同的内存地址,只是根据 start (默认是 0) 和end (默认是buffer.length) 偏移和裁剪了索引。 负的索引是从buffer尾部开始计算的。
修改这个新的Buffer实例slice切片,也会改变原来的buffer。用copy方法可以避免这个问题。buf.copy(targetBuffer, [targetStart], [sourceStart], [sourceEnd])
buf.copy(源buffer, 从新的buffer的第几位开始写入, 从源buffer的第几位开始拷贝, 拷贝到源buffer的第几位结束)
-targetBuffer Buffer 类型对象 - 将要进行拷贝的Buffer
-targetStart Number类型, 可选参数, 默认: 0
-sourceStart Number类型, 可选参数, 默认: 0
-sourceEnd Number类型, 可选参数, 默认: buffer.lengthBuffer的类方法,静态方法
//isEncoding给定的编码encoding是否有效
console.log( Buffer.isEncoding('utf-8') ); //true
console.log( Buffer.isEncoding('gbk') ); //false
console.log( Buffer.isEncoding('hex') ); //true
//isBuffer测试这个obj是否是一个buffer
var arr = [1,2,3];
var bf = new Buffer(10);
console.log( Buffer.isBuffer(arr) ); //false
console.log( Buffer.isBuffer(bf) ); //true
//Buffer.byteLength,将会返回这个字符串真实byte长度,encoding编码默认是utf-8
var str1 = 'test';
console.log(str1.length);
console.log(Buffer.byteLength(str1));
var str2 = '测试';
console.log(str2.length);
console.log(Buffer.byteLength(str2, 'utf-8'));
//Buffer.concat 拼接
var str1 = 'test';
var str2 = '测试';
var list = [new Buffer(str1), new Buffer(str2)];
console.log(list);
var bf = Buffer.concat(list, 11);//第二个参数可选,不填的情况下会自动计算,但会消耗性能
console.log(bf);
process.stdout.write('请输入内容:');
process.stdin.resume();
process.stdin.on('data', function(chunk) {
console.log(chunk); //Buffer类型
console.log(chunk.toString()); //转成字符串
console.log( '输入的内容是:' + chunk ); //隐式转换
});