2023-01-20 341
是否可以仅在JNI中引用整个bytearray,但不调用任何副本?
在本机C代码中,我有一个从java传递的字节差,我只想将一些数据与此字节差进行比较,因此我不想执行任何内存副本.有可能吗?
我知道我可以通过使用getPrimiTiveArrianCital -tose
来获取本机上的横幅指针
JNIEXPORT jbyteArray JNICALL Java_nfore_android_bt_pro_nfhfp_dsp
(JNIEnv *env, jobject jobj, jbyteArray jbIn, jbyteArray jbBase){
jbyte *bufferIn;
jbyte *bufferBase;
bufferIn = (*env)->GetPrimitiveArrayCritical(env, jbIn, NULL);
LOGD("Begin of dsp()");
LOGD("In dsp() Before Comparing...");
// Compare bufferIn with bufferBase here...
LOGD("In dsp() After Comparing...");
LOGD("End of dsp()");
(*env)->ReleasePrimitiveArrayCritical(env, jbIn, bufferIn, 0);
return jbIn;
}
您可以看到,因为我可能会更改JBIN中的数据,所以我应该使用GetPrimitiveArrayCitical来获取其指针并稍后发布.
但是,如果我只想阅读bytearray jbbase,我该如何获得JBBASE的指针,但不使用GetPrimitiveArrical批判性?
任何建议将不胜感激.非常感谢.
我用以下内容读取字节数组…
jbyte *b = (jbyte *)env->GetByteArrayElements(jbBase, NULL);
// read bytes in *b here
...
// release it
env->ReleaseByteArrayElements(jbBase, b, 0 );
您仍然需要释放它,因为这会阻止垃圾收集器在您仍在使用时可能摆脱它.
getByTearRayements方法无法保证您的程序使用参考或复制. jni返回的状态标志,其复制对象或固定对象(引脚表示参考).如果您不想复制它,那么您就没有使用getarrayelements方法,因为它始终返回副本(JVM决定是否决定复制,并且可能是副本,因为复制减轻了垃圾收集器的负担).我尝试了一下,看到我的公羊在发送大数组时增加.您还可以在下面的链接中看到:
http://publib.boulder.ibm.com/infocenter/javasdk/v5r0/index.jsp? .
正如文档所说,getPrimitiveArray关键回报是Java阵列的直接堆地址,使垃圾收集失败,直到称为相应的发行量为止.因此,如果您不想复制,则必须使用该getPrimitiveArrionCitical(当您有大数组时需要它).如果我们查看您的代码,您可以按照下面的一个接一个地获取数组(我以为您将int数组作为JNI函数发送到JNI函数):
length = (*env)->GetArrayLength(jbIn);
bufferIn = (*env)->GetPrimitiveArrayCritical(env, jbIn, NULL);
for(int i=0; i<length; i++)
printf("Value of jbIn[%d]: %d", i, bufferIn[i]);
(*env)->ReleasePrimitiveArrayCritical(env, jbIn, bufferIn, 0);
重要说明:在getPrimitiveArray批判性之后,您无法获得getArrayLength,因为JNI不允许程序在关键和释放方法之间为同一对象调用任何JNI函数.
以上所述是小编给大家介绍的如何在JNI阅读ByteArray?,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/25957.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态