我读取了一个文件var list = await file.readAsBytes();
,并希望将其复制到clangPointer<Uint8> buf = malloc.allocate(list.length);
。我知道我能做到for (var i = 0; i < list.length; i++) buf.elementAt(i).value = list[i];
。有没有其他方法可以像叮当memcpy
一样做到这一点?
目前我们支持您的代码。
我们希望支持在leaf
FFI调用(GitHub问题(中允许本机代码访问Uint8List
的内容,然后可以在本机代码中使用memcpy
函数来进行复制。
或者,我们可以在dart:ffi
本身中添加对Pointer
和TypedData
之间复制的支持(GitHub问题(。
作为一种变通方法,如果你被速度阻挡,你可以使用dart_api.c
(仅在Dart单机版中,而不是Flutter(:
DART_EXPORT Dart_Handle Dart_TypedDataAcquireData(Dart_Handle object,
Dart_TypedData_Type* type,
void** data,
intptr_t* len);
您可以将TypedData
到dart:ffi
传递给本机以获得Dart_Handle
,然后执行memcopy。