Buffer的读取方法


参看上一节“Buffer的写入数据”,本节的概念与上节相同。同时写方法和读方法是一一对应的。下面简单举例说明Buffer的读取操作。

buf.readUInt8(offset, [noAssert])

return 返回读取到的Number。
offset 参数,读取的起始位置,不可省略。
noAssert[可选]参数,
默认false当超出buf的范围时会抛出异常,
设置true超出buf范围不会抛出异常,读取范围内的byte,丢弃超出的部分。

var buf = new Buffer(8);
buf.fill(0);
buf.writeUInt8(12,0);
console.log(buf.readUInt8(0)); // 12
buf.writeUInt16LE(12,0);
console.log(buf.readUInt16LE(0)); // 12
buf.writeUInt16BE(12,0);
console.log(buf.readUInt16BE(0)); // 12
buf.writeUInt32LE(12,0);
console.log(buf.readUInt32LE(0)); // 12
buf.writeUInt32BE(12,0);
console.log(buf.readUInt32BE(0)); // 12

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

可以通过copy方法读取一个buffer的数据拷贝到另一个buffer对象内。

targetBuffer参数表示拷贝到的目标buffer。

targetStart[可选]表示拷贝targetBuffer的起始位置,默认 0 。

sourceStart[可选]表示原buffer拷贝的起始位置,默认 0 。

sourceEnd[可选] 表示原buffer拷贝的结束位置,默认buf.length 。

例1

 var sourceBuf = new Buffer("世界你好");
 var targetBuf = new Buffer(6);
 sourceBuf.copy(targetBuf,0,3,9);
 console.log(targetBuf.toString());  // 打印 "界你"

详细说明

 字符串       世         界         你         好
 bytes     e4 b8 96   e7 95 8c   e4 bd a0   e5 a5 bdgodgoogoglook sourceBuf.copy(targetBuf,0,3,9);
 e7 95 8c e4 bd a0  六个字节是最终被拷贝的bytes

例2,不带参数

 
 var sourceBuf = new Buffer("世界你好");
 var targetBuf = new Buffer(6);
 var targetBuf2 = new Buffer(9);
 sourceBuf.copy(targetBuf);
 sourceBuf.copy(targetBuf2);
 console.log(targetBuf.toString());  // 打印 "世界" 
 console.log(targetBuf2.toString());  // 打印 "世界你"