node.js - 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 秒内显示陈旧数据。
到底是怎么回事?
解决方案
如果data.buffer
已经是类型ArrayBuffer
,则无需使用Buffer.from
- 只需使用:
let timestampBuff = data.buffer.slice(0, 16);
let eventTypeBuff = data.buffer.slice(16, 24);
提供ArrayBuffer
toBuffer.from
创建一个共享缓冲区——也就是说,在结果Buffer
引用上读取/写入与底层相同的内存(在此处ArrayBuffer
解释)。这可能会造成一些混乱。使用会创建新内存,并且应该避免您遇到的任何引用问题slice
如果这不能解决您的问题,您可能需要提供更新数据的代码。
推荐阅读
- java - 睡眠中断异常:java.lang.InterruptedException:睡眠中断 - 如何让浏览器超时 40 分钟
- php - 从 PHP 5.2 (mysql) 迁移到 7.3 (pdo):从数据库加载的字符无法正确显示
- django - 如何在 Django 测试中为测试添加多个数据库
- google-cloud-platform - 启动 gcloud 时让计算引擎 vm 运行脚本
- elixir - 如何在 Elixir 中处理 POST 和 GET 请求?
- excel - excel vba在列中查找多个变量的开始行和结束行
- c++ - `create_directories` 的分段错误错误
- reactjs - 为什么我需要在firebase中取消订阅`onAuthStateChanged`
- csv - 使用 h5py 将 h5 文件转换为 csv
- javascript - 有没有办法在 PHP 中将 XML 文件转换为 JSON