我这样做是这样的:

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;
}

JNI中还有像JNIEnv::GetByteArrayRegion这样更有效的方法吗?

非常感谢你!

最佳答案

这总是会涉及一个副本,所以有什么东西比您的for循环更有效吗?也许。

分配了Uint8Pointer后,请使用asTypedList将其转换为Uint8List。现在,您可以访问其复制原语(例如setAllsetRange)以从源复制到目标。
ByteData的原始来源是什么?如果您事先知道大小,可以先分配Uint8Pointer,转换为类型化的数据,然后直接读取该大小吗?

10-01 02:56