请解释napi_create_external_buffer接口的功能及使用场景?

阅读 547
1 个回答

napi_create_external_buffer接口用于创建一个与现有数据关联的Buffer对象,无需复制数据到新的Buffer中,适用于希望ArkTS直接使用Node - API模块中已存在的内存块而避免额外拷贝的场景,如在处理大量数据时,避免不必要的数据复制操作以提高性能。在C++代码中,先分配内存并将数据复制到该内存,然后使用该接口创建Buffer对象并关联已分配内存,同时指定释放内存的回调函数。示例代码如下:

#include <malloc.h>
#include <string>
#include "napi/native_api.h"

void FinalizeCallback(napi_env env, void *data, void *hint) {
    if (data == nullptr) {
        return;
    }
    free(data);
    data = nullptr;
}

static napi_value CreateExternalBuffer(napi_env env, napi_callback_info info) {
    std::string str("CreateExternalBuffer");
    void* data = malloc(str.size());
    strcpy((char *)(data), (char*)(str.data()));
    napi_value buffer = nullptr;
    napi_create_external_buffer(env, str.size(), data, FinalizeCallback, nullptr, &buffer);
    return buffer;
}

本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进