Двоичный массив с использованием двигателя V8 - PullRequest
2 голосов
/ 10 февраля 2012

У меня есть массив байтов, определенный как

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

Затем мне нужно сохранить переменную ptr в переменной Local< Array> двигателя V8 или другого типа данных V8. В настоящее время я преобразую массив байтов в строку для хранения в переменной Local< String>, но этот подход неэффективен для моего приложения.

Заранее спасибо.

ОБНОВЛЕНО (спасибо Вячеславу Егорову)

Я тестирую решение с помощью внешнего массива, но не могу использовать его в своем коде сервера node.js. У меня есть следующий код (на моей стороне C ++):

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

У меня вопрос: как я могу использовать переменную array в коде своего сервера (javascript) для вызова функции GetIndexedPropertiesExternalArrayData().

Еще раз спасибо

Ответы [ 2 ]

4 голосов
/ 10 февраля 2012

Наиболее эффективным способом является использование внешних массивов :

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

0 голосов
/ 07 июля 2015

как Вячеслав Егоров уже ответил

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

правильный ответ.Если вам нужно больше примеров, вы можете проверить https://github.com/joyent/node, они используют множество функций v8.

просто grep -nrw ".*SetIndexedPropertiesToExternalArrayData.*" "." в папке / src проекта, и вы получите множество примеров для SetIndexedPropertiesToExternalArrayData

...