buf.toJSON()

将Buffer实例转换成JSON形式的数组。

var bfJson = new Buffer('hello');

console.log(bfJson.toJSON()); // [ 104, 101, 108, 108, 111 ]

console.log(new Buffer(bfJson.toJSON()).toString()); // hello
Buffer.isBuffer(obj)

判断对象是否是Buffer实例

console.log(Buffer.isBuffer({})); // false
console.log(Buffer.isBuffer(new Buffer(3))); // true
console.log(Buffer.isBuffer(new Buffer('test'))); // true
console.log(Buffer.isBuffer('world')); // false
console.log(Buffer.isBuffer(123)); // false
Buffer.byteLength(string, [encoding])

获取字符串的字节数

console.log(Buffer.byteLength('hello')); // 5
console.log(Buffer.byteLength('你好')); // 6
Buffer.concat(list, [totalLength])

拼接Buffer实例

var buf1 = new Buffer('小明');
var buf2 = new Buffer('今年');
var buf3 = new Buffer('5');
var buf4 = new Buffer('岁');

var bufList = [];

bufList.push(buf1);
bufList.push(buf2);
bufList.push(buf3);
bufList.push(buf4);

var bufTotal = Buffer.concat(bufList, buf1.length + buf2.length + buf3.length + buf4.length);

console.log(bufTotal.toString()); // 小明今年5岁
buf.copy(targetBuffer, [targetStart], [sourceStart], [sourceEnd])

将Buffer实例拷贝到目标对象上

var bfSource = new Buffer('可可是个乖宝宝');
var bfTarget = new Buffer(bfSource.length);

bfSource.copy(bfTarget, 0, 0, bfSource.length);

console.log(bfTarget.toString()); // 可可是个乖宝宝
buf.slice([start], [end])

取Buffer实例片段(不是将原始数据中片段复制出来,而是直接引用。所有当原数据改变时,取出的片段也将随之改变)

var bufFull = new Buffer('abcde', 'ascii');
var bufSlice = bufFull.slice(2, 3);

console.log(bufSlice.toString('ascii')); // c

bufFull[2] = 97;

console.log(bufSlice.toString('ascii')); // a

上面的代码中,我们在调用slice之后,又改变了bufFull的第三个元素值,之后我们打印bufSlice发现bufSlice中的值也随之改变了。

buf.readUInt8(offset, [noAssert])

读取一个8位的无符号整型

var bfRead = new Buffer(1);

bfRead[0] = 0x12;

console.log(bfRead.readUInt8(0)); // 18

console.log(bfRead.readUInt8(1, true)); // undefined

console.log(bfRead.readUInt8(1)); // 程序出错

buf.readUInt8只读取一个8位无符号整数,并且可以指定读取的位置。第二个参数(noAssert)表示如果读取位置超过Buffer实例的长度时是否抛出错误,默认为false。如果为false,即使超过Buffer.length,系统也不会抛错,这是之后返回undefined。

其他的read方法
  • buf.readUInt16LE(offset, [noAssert])
  • buf.readUInt16BE(offset, [noAssert])
  • buf.readUInt32LE(offset, [noAssert])
  • buf.readUInt32BE(offset, [noAssert])
  • buf.readInt8(offset, [noAssert])
  • buf.readInt16LE(offset, [noAssert])
  • buf.readInt16BE(offset, [noAssert])
  • buf.readInt32LE(offset, [noAssert])
  • buf.readInt32BE(offset, [noAssert])
  • buf.readFloatLE(offset, [noAssert])
  • buf.readFloatBE(offset, [noAssert])
  • buf.readDoubleLE(offset, [noAssert])
  • buf.readDoubleBE(offset, [noAssert])

以上方法与buf.readUInt8类似,就不多做赘述。

buf.writeUInt8(value, offset, [noAssert])

将值写入指定Buffer实例的指定位置

var bfWrite = new Buffer(1);

bfWrite.writeUInt8(0x12, 0);

console.log(bfWrite); // <Buffer 12>
其他的write方法
  • buf.writeUInt16LE(value, offset, [noAssert])
  • buf.writeUInt16BE(value, offset, [noAssert])
  • buf.writeUInt32LE(value, offset, [noAssert])
  • buf.writeUInt32BE(value, offset, [noAssert])
  • buf.writeInt8(value, offset, [noAssert])
  • buf.writeInt16LE(value, offset, [noAssert])
  • buf.writeInt16BE(value, offset, [noAssert])
  • buf.writeInt32LE(value, offset, [noAssert])
  • buf.writeInt32BE(value, offset, [noAssert])
  • buf.writeFloatLE(value, offset, [noAssert])
  • buf.writeFloatBE(value, offset, [noAssert])
  • buf.writeDoubleLE(value, offset, [noAssert])
  • buf.writeDoubleBE(value, offset, [noAssert])

以上方法与buf.writeUInt8类似,就不多做赘述。

buf.fill(value, [offset], [end])

向Buffer实例中填充指定的值

var bfFill1 = new Buffer(1);
var bfFill2 = new Buffer(6);

bfFill1.fill(97, 0, 1);

console.log(bfFill1.toString()); // a

bfFill2.fill(97);

console.log(bfFill2.toString()); // aaaaaa

如果不指定offset和end,那么fill方法会把当前Buffer实例填满。

总结

好了,Buffer模块介绍到这里就介绍完了。此模块的方法很多,但是大多数都是读取和写入的方法,形式都差不多。只要我们掌握了一个,其他的稍稍看下API就可以轻松使用了。

results matching ""

    No results matching ""