首页 > 解决方案 > 来自 ArrayBuffer 的缓冲区和内存副本

问题描述

我正在从 Node.js 8.X 切换到 Node.js 10.x,并且在“新缓冲区”上收到了一些已弃用的警告

我有一个 arrayBuffer 需要复制到一个 Buffer 中,我的第一个版本是这样的:

const newBuffer = Buffer.from(myArrayBuffer)

但是在这种情况下不会复制 arrayBuffer (https://nodejs.org/api/buffer.html#buffer_class_method_buffer_from_arraybuffer_byteoffset_length),因此在某些情况下,当我在异步代码中引用缓冲区时,我的数据已损坏

所以我切换到:

const newBuffer = new Buffer(Buffer.from(myArrayBuffer))

它有效,但我收到 Node.js 10.X 的警告

我做了这个,但不确定这是实现这一目标的最佳方法

const newBuffer = Buffer.alloc(myArrayBuffer.byteLength)
const abView = Buffer.from(myArrayBuffer)
abView.copy(newBuffer)

标签: node.jsbufferarraybuffer

解决方案


for为了安全起见,您可以使用普通的旧循环进行逐字节复制:

var newBuffer = new Buffer.alloc(myArrayBuffer.byteLength)

for (var i = 0; i < myArrayBuffer.length; i++)
    newBuffer[i] = myArrayBuffer[i];

这样,您肯定会处理一个新对象,而不仅仅是 ArrayBuffer 上的一个视图。


推荐阅读