我试图用其数组缓冲区的切片复制缓冲区,但结果缓冲区包含错误的值。这是示例:
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
所以现在我想知道是什么导致了这种“不同的行为”。
最佳答案
您似乎访问了内部缓冲区并读取了值。尝试像这样访问该值:
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));
错误的产生方式有两种可能的情况:
- 原始缓冲区中的二进制值被错误地解释
- robertKlep 建议
buffer
属性未在内部初始化
无论哪种方式,访问该属性似乎都是错误。
关于javascript - Node.js 缓冲区奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43093811/