我想使用 V8 Float32Array 数据结构。我怎样才能初始化它?
我也对直接内存访问数据感兴趣。那怎么可能呢?
更新
现在最好的方法是使用 helper Nan::TypedArrayContents
。
assert(args[i]->IsFloat32Array());
Local<Float32Array> myarr = args[i].As<Float32Array>();
Nan::TypedArrayContents<float> dest(myarr);
// Now use dest, e.g. (*dest)[0]
在node-canvas中有一个很好的例子。
原始答案,这说明了为什么助手很有用
v8 API 现在正在迅速变化,因此这取决于您的 node/io.js 版本。要访问作为参数提供的数组中的数据,这应该适用于节点 0.12 到 io.js <3.0:
assert(args[i]->IsFloat32Array()); // These type-check methods are available.
Local<Float32Array> myarr = args[i].As<Float32Array>();
void* dataPtr = myarr->GetIndexedPropertiesExternalArrayData();
在 io.js >=3.0 (v8 4.3) 你应该改用ArrayBuffer::GetContents
. (我还没有使用这个,当 3.0 发布时会更新这个。)文档在这里。
在节点 0.10 中,TypedArrays 是自制的。这是一种方法:
Local<Object> buffer = args[i]->Get(NanNew("buffer"))->ToObject();
void* dataPtr = buffer->GetPointerFromInternalField(0);
可以通过以下方式构建类型化数组:
Float32Array::New(ArrayBuffer::New(Isolate::GetCurrent(), size * 4), 0, size);