japanese site
온라인강좌책메일다운로드동아리쇼핑기술지원기업정보갤러리동영상 블로그
『신개념 4단계 리눅스기술지원 시스템 공개』

※ 『무료 리눅스 배포판 배송서비스』 ※

 
JNI ( JAVA Native Interface )
조회 : 6,725  







JNI ( JAVA Native Interface )








ㅇ 제작 : 리눅스포털(www.superuser.co.kr) 수퍼유저코리아 개발팀 이재석


SULINUX 홈페이지 : www.sulinux.net


ㅇ 리눅스포털 홈페이지 : www.superuser.co.kr


  1. JNI ( JAVA Native Interface ) ?

자바로 만들어진 프로그램에서 특정 플랫폼에서만 실행되는 코드

(Native Code)에 접근하기 위한 API이다.


Native code를 생성하는 다른 언어와 함께 공동작업을 하거나

하드웨어어 보다 깊게 접근하여 컨트롤도 가능하지만

플랫폼이 제한된다는 단접이 있다.


  1. 사용방법 및 코드 작성법


1단계 : Native Method를 선언하는 자바 클래스 작성

2단계 : 1단계에서 작성한 클래스 컴파일

3단계 : javah를 사용해서 Native Method가 사용할 헤더 파일 생성

4단계 : C언어로 Native Method 실제 구현

5단계 : C 코드와 헤더 파일을 컴파일

6단계 : 자바 프로그램 실행



위에서 보는것 처럼 6단계로 나누어 작업을 하게 된다.



1단계 : Native Method를 선언하는 자바 클래스 작성



public class tt {

  static {
      //
시스템 라이브러리 로드(so,dll)
      System.loadLibrary("tt");

      System.out.println("=== library was loaded");

  }

  //native method 선언
  public native String main1();
  public native String main2();

  public static void main(String[] args)  throws Exception {

      mains1();
      mains2();

  }

  public static String mains1()  throws Exception {

      return new tt().main1();

  }

  public static String mains2()  throws Exception {

      return new tt().main2();

  }

}





2단계 : 1단계에서 작성한 클래스 컴파일



javac tt.java





3단계 : javah를 사용해서 Native Method가 사용할 헤더 파일 생성



javah tt





4단계 : C언어로 Native Method 실제 구현



#include <jni.h>
#include "tt.h"
#include <stdio.h>

JNIEXPORT jstring JNICALL Java_tt_main1(JNIEnv *, jobject)
{
   printf("Hello, world ");

   return 0;
}

JNIEXPORT jstring JNICALL Java_tt_main2(JNIEnv *, jobject)
{
   printf("Hello, world1 ");

   return 0;
}





5단계 : C 코드와 헤더 파일을 컴파일



vc   : cl -Ic:jdk1.3.1include -Ic:jdk1.3.1includewin32 -LD HelloWorld.c


gcc  : cc –G –I/usr/local/java/include –I/usr/local/java/include/solaris HelloWorld.c –o libhelloworld.so



6단계 : 자바 프로그램 실행



java tt

=== library was loaded
Hello, world
Hello, world1





3. JAVA에서 Native code로 파라메타 넘겨주기


JAVA SOURCE


public class Test {

  public native String maint(String msg);

    static {
        System.loadLibrary("Test");
    }

}


NATIVE SOURCE

#include <jni.h>
#include "Test.h"
#include "NativeStringUtil.h"

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

JNIEXPORT jstring JNICALL
Java_Test_maint(JNIEnv *env, jobject obj, jstring str)
{
    char buf[1024];
    char *str;
    str1 = jbyteArray2str1( env, javaGetBytes(env, str) );
    sprintf(buf, "%s:%s", str1, "반가워요 이건 C함수에서 넘겨준 겁니다.");
    return javaNewString( env, cstr2jbyteArray(env, buf));
}



            java에서 public native String maint(String msg)
            여기서 넘어온 스트링값을  Native code에서
            str1 = jbyteArray2str1( env, javaGetBytes(env,
            str) ); 위와 같은  방식으로  받아온다.


       4. 마치며

           앞에서도 언급 하였듯이 java에서 직접 네이티브 코드를 호출하여 
           이용할 수 있다.

           네이티브 코드를 생상할수 있는 다른 언어와도 협업작업이 쉬워지고 
           아키텍쳐에 따른 하드웨어 콘트롤 역시 가능하며 
 
            메모리 컨트롤이나 CPU컨트롤시 보다 디테일 하게 컨트롤이 가능하다

           하지만 Native code를 생산하고 이용하게 됨으로 
           특정 아키텍쳐나 플랫폼에 종속될수 밖에 없고 
           다양한 플랫폼을 지원 하려면 그많큼 수고로울수 밖에 없다 .
           
           보는바와 같이 장단점을 잘 숙지해야 하겠다. 
                       

[원글링크] : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=1390


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기 이 글을 미투데이로 보내기

 
이재석
본명 : 이재석
e-mail : locli앳superuser.co.kr
소속 : (주)수퍼유저코리아

 
   
 


『신개념 4단계 리눅스기술지원 시스템 공개』

CentOS 리눅스 전문서적 국내최초출시

 
회사소개 | 보도기사 | 채용안내 | 광고안내 | 이용약관 | 개인정보취급방침 | 책임한계와 법적고지 | 불편사항 신고하기 | 사이트맵
ㅇ 서울 : 서울특별시 강남구 노현로79길 66, 402호(역삼동,청송빌딩)  ㅇ 부산 : 부산광역시 해운대구 우동 1470 에이스하이테크21 914호
ㅇ 대표 : 1544-8128 ㅇ부산직통 : 051-744-0077 ㅇ서울직통 : 02-856-0055 ㅇ FAX : 02-6280-2663
ㅇ 사업자번호 : 128-86-68239 ㅇ 통신판매업 신고번호 : 2013-부산금정-0035호 ㅇ 개인정보책임자 : 이재석
ㅇ 상호명 : (주) 수퍼유저 ㅇ 대표자 : 박성수
Copyright ⓒ (주)수퍼유저. All rights reserved.

 아 이 디
 비밀번호
회원 가입 | 비밀번호 찾기

블로그~
 
▷ 웹개발언어
PHP
JSP
python
기타
책제목
리눅스서버관리실무바이블v3.0


저자 박성수
페이지수 2,032 pages
펴낸곳(주)수퍼유저

리눅스 서버 구축 및 관리에 필요한 거의 모든 부분과 전반적인 실무 기법들을 다루고 있음
책제목
리눅스보안관리실무(2/E)


저자홍석범
페이지수 820 pages
펴낸곳(주)수퍼유저

리눅스 보안에 관련된 내용을 종합적으로 쓴 책. 저자의 명성 그대로 보안관련의 모든 내용이 그대로 담겨져 있다.