Буфер из ArrayBuffer с копией памяти

Я перехожу с Node.js 8.X на Node.js 10.x и получаю устаревшие предупреждения о «новом буфере».

У меня есть arrayBuffer, который мне нужно скопировать в буфер, и моя первая версия была такой:

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)

person Nico AD    schedule 09.11.2018    source источник


Ответы (1)


Чтобы быть в безопасности, вы можете сделать побайтовое копирование, используя старый простой цикл for:

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

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

Таким образом, вы наверняка будете иметь дело с новым объектом, а не просто с представлением в ArrayBuffer.

person mihai    schedule 14.11.2018