如何将一个NodeJS二进制缓冲区转换为JavaScript数组缓冲区?
当前回答
令人惊讶的是,在我的情况下(电子:发送缓冲区渲染器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;
}
其他回答
我已经将节点更新到5.0.0版本 我在研究这个:
function toArrayBuffer(buffer){
var array = [];
var json = buffer.toJSON();
var list = json.data
for(var key in list){
array.push(fixcode(list[key].toString(16)))
}
function fixcode(key){
if(key.length==1){
return '0'+key.toUpperCase()
}else{
return key.toUpperCase()
}
}
return array
}
我用它来检查我的vhd磁盘映像。
Buffer是ArrayBuffer的视图。你可以使用buffer属性访问内部包装的ArrayBuffer。
这是共享内存,不需要复制。
const arrayBuffer = theBuffer.buffer
如果你想要数据的副本,从原始的Buffer(不是从包装的ArrayBuffer)创建另一个Buffer,然后引用它的包装的ArrayBuffer。
const newArrayBuffer = Buffer.from(theBuffer).buffer
作为参考,从另一个方向,从ArrayBuffer到Buffer
const arrayBuffer = getArrayBuffer()
const sharedBuffer = Buffer.from(arrayBuffer)
const copiedBuffer = Buffer.from(sharedBuffer)
const copiedArrayBuffer = copiedBuffer.buffer
令人惊讶的是,在我的情况下(电子:发送缓冲区渲染器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倍。