본문 바로가기

Android

[JNI] GetByteArrayElements

 

JNI사용시 배열을 받을때

GetByteArrayElements 을 사용한다.

 

JNIEnv *  (jni 환경에 대한 포인터) 가 파라메터인데 자바 가상머신 내에 있는 현재 스레드에 대한 핸들이다.

 

JNIEnv 유형은 모든 JNI 함수 포인터를 저장하는 구조에 대한 포인터를 설정합니다.

그것은 다음과 같이 정의됩니다.

typedef const struct JNINativeInterface *JNIEnv;

 

 

JNI function 으로는

Get<PrimitiveType>ArrayElements Routines
Array Type
Native Type
GetBooleanArrayElements()
jbooleanArray
jboolean
GetByteArrayElements()
jbyteArray
jbyte
GetCharArrayElements()
jcharArray
jchar
GetShortArrayElements()
jshortArray
jshort
GetIntArrayElements()
jintArray
jint
GetLongArrayElements()
jlongArray
jlong
GetFloatArrayElements()
jfloatArray
jfloat
GetDoubleArrayElements()
jdoubleArray
jdouble

 

 

 

 

GetObjectArrayElement

 

jobject GetObjectArrayElement(JNIEnv *env, jobjectArray array, jsize index);

설명 : Object(자바 개체) 배열 요소를 반환합니다.

예를 들어, float 형의 배열을 생성하고 NewFloatArray 를 호출하거나 새로운 byte 배열을 만들려면 NewByteArray를 호출한다.

이 명명된 스키마는 배열로부터 요소를 받거나 요소를 더하거나 요소를 변경할 수 있도록 확장합니다.

새로운 byte 배열을 가져오려면 GetByteArrayElements 를 호출합니다.

또는 배열에 요소를 추가하거나 변경하기위해 Set<type>ArrayElements 를 호출합니다.

GetByteArrayElements 함수는 전체배열에 영향을 줍니다.

배열의 부분에 작용하기 위해서는 GetByteArrayRegion 를 대신 사용합니다.

그냥 배열요소만 변경하기위해서는 Set<type>ArrayRegion 함수를 사용합니다.

 

 

 

 

자바 메서드 호출로 배열이 반환된다;;

(*env)-> ReleaseByteArrayElements(env, jb,
(jbyte *)m, 0);


마지막인자에 들어갈 수 있는 값으로

0 : C코드내에서 배열을 업데이트 하는데 이는 자바 언어복사본에 반영된다.

JNI_COMMIT : 자바바 언어 복사본은 업데이트 되지만 로컬 jbyteArray는 해제되지 않는다.

JNI_ABORT : 변화된것은 다시 복사되지 않지만 jbyteArray 는 해제됩니다. 배열이 JNI_TRUE모드를 포함하면 값은 사용되어집니다. (무슨말이야)

 

참고 : Oracle , 번역기-_-;

 

 

 

 

 

'Android' 카테고리의 다른 글

[JNI] Android와의 JavaCV : Mat 구조체 넘김  (0) 2012.07.10
[JNI] JNI 형식 및 데이터 구조  (0) 2012.07.03
Android OpenCV 샘플코드  (3) 2012.07.02
Eclipse에서 JavaCV 설치/사용  (4) 2012.06.10
카메라 뷰와 촬영 예제  (3) 2012.06.07