Android JNI:为什么ReleaseByteArrayElements不会复制数据

时间:2014-12-07 09:17:58

标签: java android-ndk java-native-interface

在功能中:

jint Java_cn_vl_video_Encoder_encode(JNIEnv * env, jobject obj, jlong handle, jbyteArray in, jint in_size, jbyteArray out)

out是Java中的一个字节数组。

有一些像这样的代码:

char * h264Buf = (char*) (*env)->GetByteArrayElements(env, out, &h264Buf_isCopy);
jint out_size = vl_video_encoder_encode(handle_t, FRAME_TYPE_AUTO, buf, in_size, &h264Buf);
(*env)->ReleaseByteArrayElements(env, out, (jbyte*)h264Buf, 0);

我已经打印了一些jni代码,h264Buf有一些正确的数据。 但是在发布字节数组之后,在Java中out为0。

为什么会这样?

1 个答案:

答案 0 :(得分:0)

当你说“out总计为0”时,你似乎期望数组中元素的数量神奇地改变。这不是,也可能不是,它是如何运作的。请注意,您没有将out_size传递给ReleaseByteArrayElements(),而不是您可以,所以它怎么知道数组的大小已经改变了?