역시 일한다는 것은 바쁘게 만는 모양이다. 몇이을 블로그에 손을 대지 못했다... 물론 놀기도 바빳지만. 이번엔 JNI두번째 글을 올려 보려한다. JNI에서 쓸수 있는 변수형들은 자바에서 쓸수 있는것들 이면 다쓸수 있다. 먼저 배열을 이야기 하기번에 변수형들과 그외의 거들을 짧게 요약 하갰다.
일단 쓸수 있는 타입들이다. 자바 -> JNI를 이용한 C 를 기준으로 한다.
byte -> jbyte
boolean -> jboolean
int -> jint
short -> jshort
char -> jchar
float -> jfloat
double -> jdouble
long -> jlong
String ->jstring
Object -> jobject
일단 이정도가 되갰다. 모두 원래이름에 j를 붙여서 c에서 재정의 한것들이다. 마지막에 String과 Object가 있는대 Stirng는 한글을 쓰려면 코드변환을 해야하며 Object도 그냥은 쓸수 없기때문에 이이야기는 뒤에서 천천히 다루갰다.
그리고 배열이다. 배열을 jarray변수형 으로 타입들이 정의되며 한번더 거쳐야할 절차가 있다.
구연되는 부분은 C코드 내에서만 다르니 C코드만 올려서 설명하갰다.
JNIEXPORT jint JNICALL Java_array_printInt(JNIEnv *env, jobject obj,jintArray arr)
{
jsize iSize;
jint *iArray;
int i;
iSize = (*env)->GetArrayLength(env,arr);
iArray = (*env)->GetIntArrayElements(env,arr,0);
for(i=0;i<iSize;i++)
{
printf("Array[%d] = %d \n",i,iArray[i]);
}
i=20;
return i;
}
인트형배열을 가져온것이다. 인자형의 *env가 있는대 JNI에 필요한 정보 함수들이 들어 있다.
먼저 배열의 크기를 알아햐갰다.
jsize란 변수로 iSize를 만들갰다.
그리고 env에서 배열의 크기를 알아오는 함수 GetArrayLength()를 사용하자 인자값은 env와 배열이다. 이렇개 배열의 크기를 알았으면
jint 로 만들어준 포인트배열을 c에서 배열을 쓰는것처럼 쓰면된다.