В node.js У меня есть буфер (он был сохранен как blob в mysql и получен с использованием sequelize) Я знаю, что этот буфер представляет собой массив из 16-битных целых чисел. Раньше я разбирал код с циклом for.Node.js буфер для типизированного массива
var spectrum_buffer = spectrums[idx]["spectrum"];//this is a buffer
var parsed_spectrum = [];
for (var i = 0; i < spectrum_buffer.length/2; i++) {
parsed_spectrum[i] = spectrum_buffer.readInt16BE(i * 2);
}
Я читал, что readInt16BE медленно и теперь, что есть typedarrays для arraybuffers. (которые отличаются от буферов). Есть ли лучший способ создания массива из этого буфера.
Update 1
На основе обратной связи я сделал следующее
var arr = new Int16Array(spectrum.buffer)
Который дает мне соответствующий тип, однако байты становятся поменяны местами. Буфер спектра хранится в большом конце.
< Буферные e1 d7 e0 b9 e3 52 е2 d5 е2-е изд е2 92 е2 d 6 е2 97 е3 04 е1 95 е1 е2> е1 d8 е3 14 е2 FD е1 изд е2 d3 е3 09 e1 9f e2 14 e2 f2 е2 54 e2 e2 1f 54> e2 06 e2 8а ...>
первые три цифры встретив как -10271, -17952, 21219
Однако они не должны меняться, что многое, и все три должны быть отрицательным.
Первый номер должен быть -7721 (двойки дополнение всегда путает меня)
Так что делает Int16Array на узле 6 предположим большой Endian или Little Endian и как я могу справиться с этим.
Примечание: https://nodejs.org/api /buffer.html#buffer_buffers_and_typedarray Конечно, похоже, что это возможно, если вы создаете типизированный массив * до * заполнения буфера. –
Просто, чтобы вы знали, я обновил свой ответ.Существует еще более низкий уровень интерфейса, который вы можете использовать, если вам нужно прочитать данные с определенной энтерианностью. –