2017-03-29 73 views
0

我想用它的arraybuffer片複製一個緩衝區,但結果緩衝區包含錯誤的值。這裏是例子:node.js緩衝區奇怪的行爲

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

您似乎訪問內部緩衝區並讀取值。嘗試訪問這樣的值:

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-屬性內部未初始化

無論哪種方式,訪問該屬性似乎是錯誤。

+0

你試過自​​己了嗎? – robertklep

+0

我的調試器顯示「Number literal」。 – Psi

+0

但你真的嘗試過嗎? – robertklep