首页 > 解决方案 > NodeJS 的 Buffer.from(arrayBuffer) 创建过时的数据

问题描述

我从流中获取数据作为 24 字节长的缓冲区,每次调用时都包含不同的数据。在回调中,我试图将缓冲区一分为二,并记录两个新缓冲区:

// data is an instance of Buffer 24 bytes long
console.log('data: ', data);
const timestamp = Buffer.from(data.buffer, 0, 16);
const eventType = Buffer.from(data.buffer, 16, 8);
console.log('split buffers:', timestamp, eventType);

尽管我的第一个 console.log 显示了正确的数据,但第二个显示的是下一个事件的陈旧数据,并且仅在大约 12 秒后才更新,然后在接下来的 12 秒内显示陈旧数据。

到底是怎么回事?

标签: node.js

解决方案


如果data.buffer已经是类型ArrayBuffer,则无需使用Buffer.from- 只需使用:

let timestampBuff = data.buffer.slice(0, 16);
let eventTypeBuff = data.buffer.slice(16, 24);

提供ArrayBuffertoBuffer.from创建一个共享缓冲区——也就是说,在结果Buffer引用上读取/写入与底层相同的内存(在此处ArrayBuffer解释)。这可能会造成一些混乱。使用会创建新内存,并且应该避免您遇到的任何引用问题slice

如果这不能解决您的问题,您可能需要提供更新数据的代码。


推荐阅读