在尝试调试我的应用程序半天后,我遇到了一个非常奇怪的行为。请看下面的代码段:
const buffer = Buffer.from([12, 34, 56, 78, 90]);
const dataView = new DataView(buffer.buffer);
console.log('buffer byteLength:', buffer.byteLength);
console.log('dataView byteLength:', dataView.byteLength);
console.log('first uint8 in buffer:', buffer.readUInt8(0));
console.log('first uint8 in dataView:', dataView.getUint8(0));
对我来说,这个脚本的输出是:
buffer byteLength: 5
dataView byteLength: 8192
first uint8 in buffer: 12
first uint8 in dataView: 99
我使用的Node.js版本是8.6.0。
答案 0 :(得分:0)
显然,尽管未在official documentation of Buffer.from
中注明,该功能会自动创建Buffer
不安全分配,如documentation of Buffer.allocUnsafe()
所述。
There is an answer on StackOverflow暗示有一个属性Buffer#byteOffset
保存Buffer
基础ArrayBuffer
的字节偏移量。 Buffer
本身没有记录此属性,但Uint8Array
,whose API Buffer
implements没有记录此属性。
使用以下行扩展原始代码段将产生预期的输出。
console.log('first uint8 in dataView:', dataView.getUint8(buffer.byteOffset)); // output: 12