使用 JNI 从本机方法返回 null
我有一些返回jbyteArray的本机代码(所以Java端的byte[]),我想返回null。但是,如果我简单地返回0代替jbyteArray,我会遇到问题。
更多信息:主要逻辑是在Java中,本机方法用于将一些数据编码为字节流。不要问..它必须像这样完成。最近,本机代码必须进行一些更改,现在它运行得非常慢。经过一些实验,包括在返回之前注释掉本机方法中的所有代码,事实证明返回0会导致速度变慢。当返回实际的jbyteArray时,一切都很好。
我的代码的方法签名:
在C++方面:
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。不幸的是,我在谷歌上没有运气。
谢谢!
编辑:添加了其他信息。