【问题标题】:How to read/write data to ArrayBuffer from C++ Node.js addon?如何从 C++ Node.js 插件读取/写入数据到 ArrayBuffer?
【发布时间】:2017-05-25 20:51:44
【问题描述】:

简而言之,我有一个插件,它完成了一个导致uint8_t 数组的操作。我需要将此数组及其内容转换为ArrayBuffer,然后返回。

相反,插件也可以接受 ArrayBuffer 作为输入,我需要将其连同其内容一起转换为 uint8_t 数组。

我无法找到有关如何执行此操作的明确文档。我是 Node、v8、插件等的新手。如果有人知道如何做到这一点并且可以帮助我,那就太好了。

【问题讨论】:

    标签: c++ node.js arraybuffer node.js-addon


    【解决方案1】:

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

    从现有内存块创建ArrayBuffer

    // given void* data
    v8::Local<v8::ArrayBuffer> ab = v8::ArrayBuffer::New(
        Isolate::GetCurrent(), data, byte_length, ArrayBufferCreationMode::kInternalized)
    

    Docs are here. 最后一个参数控制当 ArrayBuffer 被 GC'ed 时内存块是否会被 v8 处理为free'd。如果你使用kInternalized,内存必须可以用free释放。

    要获得支持ArrayBuffer 的内存,请使用ab-&gt;GetContents()。这会返回一个 Contents 类实例,它有一个 void* Data() 方法。

    有关其他示例,请参阅 https://stackoverflow.com/a/31712512/1218408

    【讨论】:

    • 你说得对,Uint8Array 是首选,但是对于这个特定的实现,它指定我的程序必须返回一个 ArrayBuffer。至于其余的,我确实最终弄明白了,但 kInternalized 对我来说是新的。谢谢。
    • 我尝试使用 ArrayBufferCreationMode::kInternalized。但引发了异常。
    猜你喜欢
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多