【问题标题】:dart ffi how to copy Uint8List to Pointer<Uint8>?dart ffi 如何将 Uint8List 复制到 Pointer<Uint8>?
【发布时间】:2021-12-20 11:29:05
【问题描述】:

我读了一个文件var list = await file.readAsBytes();,想把它复制到clang Pointer&lt;Uint8&gt; buf = malloc.allocate(list.length);。我知道我可以做到for (var i = 0; i &lt; list.length; i++) buf.elementAt(i).value = list[i];。有没有像clangmemcpy一样的其他方法?

【问题讨论】:

  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: flutter dart ffi


【解决方案1】:

目前您拥有的代码是我们支持的。

我们希望支持在leaf FFI 调用(GitHub issue) 中将Uint8List 的内容访问权授予本机代码,然后可以在本机代码中使用memcpy 函数进行复制。

或者,我们可以在 dart:ffi 本身中添加支持,以便在 PointerTypedData (GitHub issue) 之间进行复制。

如果您被速度限制,作为一种解决方法,您可以使用 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 传递给native 以获得Dart_Handle,然后进行内存复制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-25
    • 2020-03-16
    • 2020-10-21
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    相关资源
    最近更新 更多