使用V8引擎的二进制数组

时间:2012-02-09 20:30:39

标签: bytearray type-conversion v8

我有一个字节数组,定义为

unsigned char ptr = new unsigned char[1024];
fillWithSomething(ptr, 1024);

然后,我需要将ptr变量存储在V8 Engine的Local< Array>变量或其他类型的V8数据类型中。 目前,我正在将字节数组转换为字符串,以便存储在Local< String>变量中,但这种方法对我的应用程序来说效率很低。

提前致谢。

更新(感谢Vyacheslav Egorov)

我使用外部阵列测试解决方案,但我不能在我的node.js服务器代码上使用它。我有以下代码(在我的扩展端C ++):

Handle<Object> array = Object::New();
array->SetIndexedPropertiesToExternalArrayData(getBytes(), kExternalUnsignedByteArray, bytesSize);
return array;

我的问题是,如何在服务器代码(javascript)中使用array变量来调用函数GetIndexedPropertiesExternalArrayData()

再次感谢

2 个答案:

答案 0 :(得分:4)

最有效的方法是使用外部数组

v8::Handle<v8::Object> external_array = v8::Object::New();
external_array->SetIndexedPropertiesToExternalArrayData(ptr, v8::kExternalUnsignedByteArray, 1024);

外部数组的良好示例API使用(包括终身管理)可以在d8.cc中找到:https://github.com/v8/v8/blob/7a0c55bd0d07135ce317f0e95909120eaafd5973/src/d8.cc#L394-L591

答案 1 :(得分:0)

像Vyacheslav Egorov已经回答了

  obj->SetIndexedPropertiesToExternalArrayData(data,
                                           kExternalUnsignedByteArray,
                                           length);

是正确的答案。 如果您需要更多示例,可以查看https://github.com/joyent/node 他们使用了很多v8功能。

项目的/ src文件夹中只有grep -nrw ".*SetIndexedPropertiesToExternalArrayData.*" ".",您将获得SetIndexedPropertiesToExternalArrayData

的大量示例