4

我想使用 V8 Float32Array 数据结构。我怎样才能初始化它?

我也对直接内存访问数据感兴趣。那怎么可能呢?

4

1 回答 1

6

更新

现在最好的方法是使用 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);
于 2015-07-29T22:53:08.053 回答