如何将一个NodeJS二进制缓冲区转换为JavaScript数组缓冲区?
当前回答
现在有一个非常有用的npm包:buffer https://github.com/feross/buffer
它试图提供一个API,是100%相同的节点的缓冲区API,并允许:
将类型化数组转换为缓冲区:https://github.com/feross/buffer#convert-typed-array-to-buffer 将缓冲区转换为类型化数组:https://github.com/feross/buffer#convert-buffer-to-typed-array
还有更多。
其他回答
使用以下优秀的npm包:to-arraybuffer。
或者,您可以自己实现它。如果你的缓冲区叫buf,这样做:
buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength)
令人惊讶的是,在我的情况下(电子:发送缓冲区渲染器ArrayBuffer),这只是工作
function bufferToArrayBuffer(buffer: Buffer): ArrayBuffer {
return buffer.buffer as ArrayBuffer;
}
快了100倍
function bufferToArrayBuffer(buf) {
const ab = new ArrayBuffer(buf.length);
const view = new Uint8Array(ab);
for (let i = 0; i < buf.length; ++i) {
view[i] = buf[i];
}
return ab;
}
NodeJS,在某一时刻(我想是v0.6.x)有ArrayBuffer支持。我在这里创建了一个用于base64编码和解码的小库,但自从更新到v0.7以来,测试(在NodeJS上)失败了。我正在考虑创建一些标准化的东西,但在此之前,我认为应该使用节点的本机缓冲区。
一种更快的写法
var arrayBuffer = new Uint8Array(nodeBuffer).buffer;
然而,在包含1024个元素的缓冲区上,这似乎比建议的toArrayBuffer函数慢了大约4倍。
这个代理将把缓冲区暴露为任何typedarray,没有任何副本。:
https://www.npmjs.com/package/node-buffer-as-typedarray
它只能在LE上工作,但是可以很容易地移植到be上。 而且,从来没有真正测试过这有多高效。