[英]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.