node.js缓冲奇怪的行为

时间:2017-03-29 12:40:36

标签: javascript node.js

我正在尝试使用其arraybuffer的片复制缓冲区,但结果缓冲区包含错误的值。这是一个例子:

var sourceBuf = new Buffer(1);
sourceBuf.writeUInt8(1, 0);
var slice = sourceBuf.buffer.slice(0,1);
var resultBuf = new Buffer(slice);
console.log(resultBuf.readUInt8(0));

输出118

在TypedArray的情况下,所有工作都像我最初期望的那样:

var sourceBuf = new Uint8Array(1);
sourceBuf[0] = 1;
var slice = sourceBuf.buffer.slice(0,1);
var resultBuf = new Uint8Array(slice);
console.log(resultBuf[0]);

输出1

所以现在我想知道导致这种“不同行为”的原因。

1 个答案:

答案 0 :(得分:1)

您似乎访问内部缓冲区并读取值。尝试访问这样的值:

var sourceBuf = new Buffer(1);
sourceBuf.writeUInt8(1, 0);
var slice = sourceBuf.slice(0,1); // Changed this line
var resultBuf = new Buffer(slice);
console.log(resultBuf.readUInt8(0));

关于如何生成错误,有两种可能的情况:

  1. 原始缓冲区中的二进制值被解释为错误的方式
  2. robertKlep建议buffer - 属性在内部未初始化
  3. 无论哪种方式,访问该属性似乎都是错误。