차근차근/JAVA JSP

JNI 기초

예쁜꽃이피었으면 2014. 7. 26. 01:26


JNI_Program_Guide.pdf


http://lsit81.tistory.com/entry/JNI-%EA%B8%B0%EC%B4%88

 

JNI 란?

JNI는 Java Native Interface의 약자로 Java와 C/C++ 사이에 Interface를 제공하여 서로의 기능을 사용 가능하도록 만들어 줍니다.

 

장점

동작 속도가 Java보다 빠릅니다. 

기존에 구현된 C/C++ 라이브러리를 조금만 수정하면 Java에서 사용할 수 있습니다. 

 

 

단점 

CPU에 의존적이며 (안드로이드의 경우 x86, ARM CPU만 지원 합니다.)

디버깅이 어렵다.

 

 

 

JNI Function 생성 규칙.

 

1. Java Class 생성

Java에서 C/C++의 기능을 호출하기 위해서는 먼저 Interface를 정의 해야 하므로

Java에서 Native C/C++을 호출하기 위한 클래스를 만들어 줍니다. 

 

1
2
3
4
5
package com.example.jnitoast;
 
public class Toast {
    public native void displayToast(CharSequence charseq);
}

 

여기서 native는 Native Function이라는 것을 알려주는 Keyword입니다.

 

 

2. Native Function 만들기.

 

Native Function Naming 규칙.

 

Java_[패키지 명]_[클래스 이름]_[native function 이름]

(* 패키지를 구분하는 "."은 "_"로 대체 합니다.)

 

 

 

자바와 JNI 타입

자바에서 건네준 변수는 아래 테이블에 나열된 것 같이 자동으로 해당 변수 타입으로 매핑됩니다. 


 

Java

JNI (C/C++) 

JNI (배열)

boolean 

jboolean 

jbooleanArray 

byte 

jbyte 

jbyteArray 

char 

jchar 

jcharArray 

short 

jshort 

jshortArray 

int 

jint 

jintArray 

long 

jlong 

jlongArray 

float 

jfloat 

jfloatArray 

double 

jdouble 

jdoubleArray 

object 

jobject 

jobjectArray 

 

 

 

그래서 위 displayToast Function은 다음과 같이 정의할 수 있습니다. 

 

void Java_com_example_jnitoast_Toast_displayToast(JNIEnv* env, jobject thiz, jobject text)

 

 

여기서 첫번째, 두번째 파라미터는 Native Function 정의시 항상 정의되며,

각 파라미터의 의미는 다음과 같습니다.

 

JNIEnv env

- JNI 인터페이스 포인터는 자바 메서드와 매핑되는 각 네이티브 함수를 위한 매개 변수로 전달되며 

 

- 이 포인터는 JNI 환경에 있는 함수들과 상호작용을 하도록 해줌니다.

 

주로 FindClass, GetStaticMethodID 등을 할때 사용됩니다.

 

jobject thiz

- 두번째 파라미터로 넘어온 jobject는 현재 클래스를 의미합니다 

여기서는 Java의 Toast.this를 의미합니다.

 

 

jobject text

- 여기서 text는 CharSequence 객체를 뜻하며, Java와 JNI 타입에 정의되지 않은 변수는 모두 jobject로 매핑 됩니다, 

 

 

 

자세한 내용은 JNI Program Guide 문서를 첨부하였으니 살펴보시기 바랍니다.


반응형

'차근차근 > JAVA JSP' 카테고리의 다른 글

java controller , java servlet 차이??  (0) 2014.07.26
request , response  (0) 2014.07.26
if문 equals / ==  (0) 2014.07.26
hashmap 의 value에 다른 배열 넣기/value에 값 여러개 주기  (0) 2014.07.26
자바API문서??  (0) 2014.07.26