2

I'm doing it in this way:

Pointer<Uint8> _byteDataToPointer(ByteData byteData) {
  final uint8List = byteData.buffer.asUint8List();
  final length = uint8List.lengthInBytes;
  final result = allocate<Uint8>(count: length);

  for (var i = 0; i < length; ++i) {
    result[i] = uint8List[i];
  }

  return result;
}

Is there a more efficient way like JNIEnv::GetByteArrayRegion in JNI?

Thank you very much!

4

1 回答 1

2

这总是会涉及到一个副本,那么有什么比你的 for 循环更有效的吗?也许。

分配您的Uint8Pointer使用后将asTypedList其转换为Uint8List. 现在您可以访问它的复制原语,setAll并将setRange其从源复制到目标。

的原始来源是ByteData什么?如果事先知道大小,是否可以先分配 Uint8Pointer,转换为类型化数据,然后直接读取?

于 2019-12-20T11:20:21.670 回答