node.js基础API(一):Buffer

Buffer (缓冲)

Buufer类用于处理二进制数据流。
Buffer 类的实例类似于整数数组,但 Buffer 的大小是固定的、且在 V8 堆外分配物理内存。
Buffer 的大小在被创建时确定,且无法调整。
Buffer 类在 Node.js 中是一个全局变量,因此无需使用 require(‘buffer’).Buffer。

1.创建Buffer
Buffer.alloc(size[, fill[, encoding]])
Buffer.allocUnsafe(size)
Buffer.from()

console.log(Buffer.alloc(5));                   //'<Buffer 00 00 00 00 00>'
console.log(Buffer.alloc(5,1));                 //'<Buffer 01 01 01 01 01>'

'/* Buffer.allocUnsafe()创建的 Buffer 实例的底层内存是未初始化的。 新创建的 Buffer 的内容是未知的,且可能包含敏感数据。 使用前可以使用 buf.fill(0) 初始化 Buffer 实例为0。 */'
console.log(Buffer.allocUnsafe(5));             //'<Buffer 00 00 64 65 00>'

console.log(Buffer.from([1,2,3,4]));            //'<Buffer 01 02 03 04>'

'/* Buffer.from()可以指定字符串的编码,默认为‘utf-8’ */'
console.log(Buffer.from('test'));               //'<Buffer 74 65 73 74>'
console.log(Buffer.from('test','base64'));      //'<Buffer b5 eb 2d>'

2.类属性和类方法

Buffer.byteLength:返回一个字符串的实际字节长度

console.log(Buffer.byteLength('test'));      //4
console.log(Buffer.byteLength('测试'));      //6

Buffer.isBuffer():如果 obj 是一个 Buffer 则返回 true ,否则返回 false 。

console.log(Buffer.isBuffer('test'));                   //false
console.log(Buffer.isBuffer(Buffer.from('test')));      //true

Buffer.concat():返回一个合并了 list 中所有 Buffer 实例的新建的 Buffer 。

const buf1 = Buffer.from('Hello ');
const buf2 = Buffer.from('World ');
const buf3 = Buffer.from('!');
const buf = Buffer.concat([buf1,buf2,buf3]);
console.log(buf.toString());                        //'Hello World !'

3.实例属性和方法

buf.length

const buf = Buffer.from('this is a test!');
console.log(buf.length);                //15

buf.fill(value[, offset[, end]][, encoding]):填充Buffer

  • value | | 用来填充 buf 的值。
  • offset 开始填充 buf 前要跳过的字节数。默认: 0。
  • end 结束填充 buf 的位置(不包含)。默认: buf.length。
  • encoding 如果 value 是一个字符串,则这是它的字符编码。默认: ‘utf8’。
    如果未指定 offset 和 end,则填充整个 buf。
const buf1 = Buffer.allocUnsafe(5);
buf1.fill(10,2,4);                      //<Buffer 04 00 0a 0a 00>

buf.equals():比较Buffer的内容

const buf2 = Buffer.from('test');       
const buf3 = Buffer.from('test');
const buf4 = Buffer.from('testa');
console.log(buf2.equals(buf3));         //true
console.log(buf2.equals(buf4));         //false

buf.indexOf(value[, byteOffset][, encoding])

console.log(buf3.indexOf('es'));        //1
console.log(buf3.indexOf('esa'));       //-1

buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])

  • target : 要拷贝进的 Buffer 或 Uint8Array。
  • targetStart : target 中开始拷贝进的偏移量。 默认: 0
  • sourceStart : buf 中开始拷贝的偏移量。 当 targetStart 为 undefined 时忽略。 默认: 0
  • sourceEnd : buf 中结束拷贝的偏移量(不包含)。 当 sourceStart 为 undefined时忽略。 默认: buf.length
const buf5 = Buffer.allocUnsafe(10);
const buf6 = Buffer.allocUnsafe(10).fill('!');

for (let i = 0; i < 10; i++) {
  buf5[i] = i + 97;
}

buf5.copy(buf6, 2, 4, 6);

console.log(buf6.toString());       //!!ef!!!!!!

参考资料:http://nodejs.cn/api/buffer.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值