NodeJs学习笔记 02 -- Buffer

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.length

  • buf.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.length

  • Buffer的类方法,静态方法

//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 );  //隐式转换
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值