如何从 C++ Node.js 插件 read/write 数据到 ArrayBuffer?
How to read/write data to ArrayBuffer from C++ Node.js addon?
简而言之,我有一个插件可以完成一个生成 uint8_t
数组的操作。我需要将此数组及其内容转换为 ArrayBuffer
和 return。
相反,插件也可以接受 ArrayBuffer
作为输入,我需要将其连同其内容一起转换为 uint8_t
数组。
我找不到有关如何执行此操作的明确文档。我是 Node、v8、addons 等方面的新手。如果有人知道如何执行此操作并且可以帮助我,那就太好了。
您可能希望使用 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 时,内存块是否会被 v8 free
。如果您使用 kInternalized
,则内存必须可通过 free
.
释放
要获取支持 ArrayBuffer
的内存,请使用 ab->GetContents()
. That returns a Contents class 实例,它有一个 void* Data()
方法。
有关其他示例,请参阅 。
简而言之,我有一个插件可以完成一个生成 uint8_t
数组的操作。我需要将此数组及其内容转换为 ArrayBuffer
和 return。
相反,插件也可以接受 ArrayBuffer
作为输入,我需要将其连同其内容一起转换为 uint8_t
数组。
我找不到有关如何执行此操作的明确文档。我是 Node、v8、addons 等方面的新手。如果有人知道如何执行此操作并且可以帮助我,那就太好了。
您可能希望使用 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 时,内存块是否会被 v8 free
。如果您使用 kInternalized
,则内存必须可通过 free
.
要获取支持 ArrayBuffer
的内存,请使用 ab->GetContents()
. That returns a Contents class 实例,它有一个 void* Data()
方法。
有关其他示例,请参阅 。