У меня есть собственный код, который возвращает jbyteArray (то есть byte[] на стороне Java), и я хочу вернуть null. Однако у меня возникают проблемы, если я просто возвращаю 0 вместо jbyteArray.
Еще немного информации: основная логика находится в Java, для кодирования некоторых данных в поток байтов используется нативный метод. не спрашивайте.. это должно быть сделано так. Недавно нативный код пришлось немного изменить, и теперь он работает ужасно медленно. После некоторых экспериментов, включавших закомментирование всего кода в нативном методе перед возвратом, оказалось, что возврат 0 вызывает замедление. При возврате фактического jbyteArray все в порядке.
Подписи методов для моего кода:
На стороне С++:
extern "C" JNIEXPORT jbyteArray JNICALL Java_com_xxx_recode (JNIEnv* env, jclass java_this, jbyteArray origBytes, jobject message)
На стороне Java:
private static native byte[] recode(byte[] origBytes, Message message);
Нативный код выглядит примерно так:
jbyteArray javaArray;
if (error != ERROR) {
// convert to jbyteArray
javaArray = env->NewByteArray((jsize) message.size);
env->SetByteArrayRegion(java_array, 0, message.size, reinterpret_cast<jbyte*>(message.buffer()));
if (env->ExceptionOccurred()) {
env->ExceptionDescribe();
error = ERROR;
}
}
if (error == ERROR) {
return 0; // Does NOT work - doesn't crash, just slows everything down horrible.
}
else {
return javaArray; // Works perfectly.
}
Кто-нибудь знает какие-либо причины, по которым это могло произойти? Допустимо ли возвращать NULL из собственного метода вместо jbyteArray или есть другая процедура для возврата null обратно в Java. К сожалению, мне не повезло с Google.
Спасибо!
РЕДАКТИРОВАТЬ: добавлена дополнительная информация.