gpt4 book ai didi

java - 将 jobjectarray 转换为 vector

转载 作者:行者123 更新时间:2023-11-28 02:21:15 25 4
gpt4 key购买 nike

我正在使用 JNI 从 java 传递一个 jobjectarray(实际上是一个 byte[][])。

我想将其转换为 uint8_t* 或 vector (最好是后者)形式的可用“字节数组”,以便它与我以这些形式使用它的所有现有代码兼容。

关于我如何最好地做到这一点有什么建议吗?如果更干净,可以改用 jbytearray ...

最佳答案

我不确定 vector<uint8_t*>在这里会是个好主意。 vector<vector<uint8_t>>可能会更好。

jsize numRows = env->GetArrayLength(objArray);
vector<vector<uint8_t>> v(numRows);

写一个循环,从 jobjectArray 中获取第 n:th 行:

jbyteArray bytes = (jbyteArray) env->GetObjectArrayElement(objArray, n);

然后获取指向该行中实际字节的指针,并将这些字节插入到您的 vector 中:

jsize numBytes = env->GetArrayLength(bytes);
uint8_t *data = (uint8_t*) env->GetByteArrayElements(bytes, NULL);
std::copy(data, data + numBytes, std::back_inserter(v[n]));
env->ReleaseByteArrayElements(bytes, JNI_ABORT);

立即删除对 bytes 的本地引用之后可能是个好主意,以避免在您有大量行时溢出本地引用表:

env->DeleteLocalRef(bytes);

尽管这是一种比 byte[][] 更有效的方法可能是使用 java.nio.ByteBuffer通过 allocateDirect 获得.

关于java - 将 jobjectarray 转换为 vector<uint8_t>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32386446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com