У меня есть собственный код, который возвращает 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.
Спасибо!
EDIT: добавлена дополнительная информация.