繁体   English   中英

将jobjectarray转换为向量<uint8_t>

[英]Convert jobjectarray into vector<uint8_t>

我正在使用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行:

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

然后获得指向该行中实际字节的指针,并将这些字节插入向量中:

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[][]更有效的方法可能是使用通过allocateDirect获得的java.nio.ByteBuffer

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM