如何从C++ Node.js插件中读写ArrayBuffer的数据?

4
简而言之,我有一个插件,它完成一个操作并生成一个 uint8_t 数组。我需要将这个数组及其内容转换成一个 ArrayBuffer ,然后返回。
反过来,这个插件也可以接受一个ArrayBuffer 作为输入,我需要将它及其内容转换成一个uint8_t 数组。
我在寻找如何做到这一点的清晰文档方面遇到了困难。我对 Node、v8、插件等都很新。如果有人知道如何做到这一点,并能帮助我,那就太棒了。
1个回答

3

您可能希望使用Uint8Array而不是ArrayBuffer,但是...

要从现有的内存块创建ArrayBuffer

// given void* data
v8::Local<v8::ArrayBuffer> ab = v8::ArrayBuffer::New(
    Isolate::GetCurrent(), data, byte_length, ArrayBufferCreationMode::kInternalized)
此处有文档。 最后一个参数用于控制内存块在ArrayBuffer被垃圾回收时是否会由v8释放。如果使用kInternalized,则必须使用free释放内存。
要获取ArrayBuffer的内存,请使用ab->GetContents()。这将返回一个Contents类实例,该实例有一个void* Data()方法。
有关其他示例,请参见https://dev59.com/8Yfca4cB1Zd3GeqPqPpS#31712512

你说得没错,Uint8Array 更好,但是对于这个特定的实现,我的程序必须返回一个 ArrayBuffer。至于其他部分,我最终还是解决了,但 kInternalized 对我来说是新的。谢谢。 - S. Vaughn
我尝试使用ArrayBufferCreationMode :: kInternalized。但是引发了异常。 - user3395707

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接