使用Buffer.from创建的Buffer的底层ArrayBuffer包含Node.js 8.6.0中的奇怪值

时间:2018-05-01 15:03:40

标签: javascript node.js

在尝试调试我的应用程序半天后,我遇到了一个非常奇怪的行为。请看下面的代码段:

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。

1 个答案:

答案 0 :(得分:0)

显然,尽管未在official documentation of Buffer.from中注明,该功能会自动创建Buffer 不安全分配,如documentation of Buffer.allocUnsafe()所述。

There is an answer on StackOverflow暗示有一个属性Buffer#byteOffset保存Buffer基础ArrayBuffer的字节偏移量。 Buffer本身没有记录此属性,但Uint8Arraywhose API Buffer implements没有记录此属性。

使用以下行扩展原始代码段将产生预期的输出。

console.log('first uint8 in dataView:', dataView.getUint8(buffer.byteOffset)); // output: 12