转换二进制缓冲区的NodeJS为JavaScript ArrayBuffer [英] Convert a binary NodeJS Buffer to JavaScript ArrayBuffer
问题描述
我怎么能转换二进制的NodeJS缓冲到一个JavaScript ArrayBuffer?
How can I convert a NodeJS binary buffer into a JavaScript ArrayBuffer?
推荐答案
的实例缓存
也都在node.js中4.x和更高 Uint8Array
的实例。因此,最有效的解决方案是直接访问 buf.buffer
属性,每个的 http://stackoverflow.com/a/31394257/1375574 。缓冲构造也需要一个ArrayBufferView参数,如果你需要去另一个方向。
Instances of Buffer
are also instances of Uint8Array
in node.js 4.x and higher. Thus, the most efficient solution is to access the buf.buffer
property directly, as per http://stackoverflow.com/a/31394257/1375574. The Buffer constructor also takes an ArrayBufferView argument if you need to go the other direction.
请注意,这将不会创建一个副本,这意味着写入任何ArrayBufferView将通过写信给原始缓冲区的实例。
Note that this will not create a copy, which means that writes to any ArrayBufferView will write through to the original Buffer instance.
在旧版本中,Node.js的既有ArrayBuffer作为V8的一部分,但Buffer类提供了更加灵活的API。为了读取或写入一个ArrayBuffer,你只需要创建一个视图,并复制对面。
In older versions, node.js has both ArrayBuffer as part of v8, but the Buffer class provides a more flexible API. In order to read or write to an ArrayBuffer, you only need to create a view and copy across.
从缓冲区ArrayBuffer:
From Buffer to ArrayBuffer:
function toArrayBuffer(buf) {
var ab = new ArrayBuffer(buf.length);
var view = new Uint8Array(ab);
for (var i = 0; i < buf.length; ++i) {
view[i] = buf[i];
}
return ab;
}
从ArrayBuffer到缓冲区:
From ArrayBuffer to Buffer:
function toBuffer(ab) {
var buf = new Buffer(ab.byteLength);
var view = new Uint8Array(ab);
for (var i = 0; i < buf.length; ++i) {
buf[i] = view[i];
}
return buf;
}
这篇关于转换二进制缓冲区的NodeJS为JavaScript ArrayBuffer的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!