将 Dart 中的 ByteData 转换为 C++ 中的 unsigned char* 的有效方法?
An efficient way to convert ByteData in Dart to unsigned char* in C++?
我是这样做的:
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
。现在您可以访问它的复制原语,例如 setAll
和 setRange
以从源复制到目标。
ByteData
的原始来源是什么?如果你提前知道大小,你能不能先分配Uint8Pointer,转换成类型化数据,然后直接读入?
我是这样做的:
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
。现在您可以访问它的复制原语,例如 setAll
和 setRange
以从源复制到目标。
ByteData
的原始来源是什么?如果你提前知道大小,你能不能先分配Uint8Pointer,转换成类型化数据,然后直接读入?