JNI에서 전체 bytearray를 참조 할 수는 있지만 사본을 호출 할 수 있습니까?JNI에서 bytearray를 읽는 방법?
네이티브 C 코드에서 저는 자바에서 패스 한 bytearray를 가지고 있습니다. 그리고 저는 일부 데이터를이 bytearray와 비교하기를 원하므로 어떤 메모리 복사본도 원하지 않습니다. 가능한가?
는 내가 얻을 GetPrimitiveArrayCritical에 사용해야합니다, 당신이 볼 수있는 것처럼 나는 jbIn의 데이터를 변경할 수 있기 때문에, 그
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;
}
같은 GetPrimitiveArrayCritical에 뭔가를 사용하여 네이티브 ByteArray에의 포인터를 얻을 수 알고 포인터를 놓고 나중에 놓으십시오.
그러나 bytearray jbBase를 읽으려면 jbBase의 포인터를 가져올 수 있지만 GetPrimitiveArrayCritical을 사용하지 않는 방법은 무엇입니까?
의견을 보내 주시면 감사하겠습니다. 고마워.
답장을 보내 주셔서 감사합니다. Jim. 스펙 가이드에 따르면, GetByteArrayElements는 여전히 copy를 할 것입니다, 맞습니까? 게다가, GetByteArrayElements가이 bytearray에 독점 모드를 설정하겠습니까? 다른 스레드에서이 bytearray를 동시에 읽어야 할 경우 충돌이 발생합니까? 감사. –
독점 모드는 설정하지 않지만 배열을 읽는 중이라면 동시 액세스가 정상적으로 이루어져야합니다. 동시에 쓸 수 있으면 뮤텍스를 사용하거나 동기화해야합니다. 그것이 복사를한다면, 배열에 포인터를 반환한다고 말할 수 있을지 모르겠다. 고성능 코덱으로 사용하고 배열을 복사하는 것을 결코 눈치 채지 못했다. 그것은 사본을했다. –
좋아, 알았다. 도와 주셔서 감사합니다 Jim. –