我在使用新橋接JNI入口點的類中使用std::vector
與新的C++庫。修改std :: vector的基礎數據結構不會改變其大小
因爲有很多JNI來電涉及jbyteArray
的,我已經寫了簡單的轉換功能:
std::vector<uint8_t> Jni::Types::vectorForJarray(jbyteArray a) {
auto env = Jni::getEnv();
auto len = env->GetArrayLength(a);
std::vector<uint8_t> result;
result.reserve(static_cast<unsigned int>(len));
env->GetByteArrayRegion (a, 0, len, reinterpret_cast<jbyte*>(result.data()));
return result;
}
和
jbyteArray Jni::Types::JarrayForVector(std::vector<uint8_t> v) {
auto env = Jni::getEnv();
auto array = env->NewByteArray(v.size());
if (env->GetArrayLength(array) != v.size()) {
env->DeleteLocalRef(array);
array = env->NewByteArray(v.size());
}
void* temp = env->GetPrimitiveArrayCritical(array, 0);
memcpy(temp, v.data(), v.size());
env->ReleasePrimitiveArrayCritical(array, temp, 0);
return array;
}
問題
如果我通過其data()
方法修改vector
,其長度(通過獲得0)將保持在0.你有任何想法如何使向量顯示正確的大小?我會注意到,這個功能被稱爲大量的次,所以性能相當重要。
你不能'reinterpret_cast'std :: vector :: iterator'成jbyte *。這就是我使用'data()'的原因。 –
Crossfire
我在這個函數中返回一個'jbyteArray',這個向量不應該在這裏改變。 – Crossfire