JNI 문자열 – 1/3

By | July 3, 2015

자바의 String은 유니코드를 기반으로 한다. JNI에서 C/C++로 자바 String 객체를 다루기 위해서 인코딩에 따라 API를 지원한다.

  • UTF-8 기반 API
  • UTF-16 기반 API

자바 String을 JNI를 통해서 C/C++로 읽기 위해서 아래의 단계를 거친다.

  1. jstring으로 자바 String 인스턴스를 전달받는다.
  2. GetStringUTFChars() 함수로 C/C++로 접근할 수 있는 문자 배열을 만든다. 이 문자열은 UTF-8로 인코딩되고 힙에 동적으로 할당된다.
  3. 2에서 얻은 문자열로 원하는 작업을 한다
  4. ReleaseStringUTFChars() 함수로 힙에 문자열을 위해 할당한 메모리를 해제한다.

인코딩에 따른 JNI문자열 함수는 아래와 같다

  • 문자 배열 포인터 리턴
    • GetStringUTFChars() [UTF-8]
    • GetStringChars() [UTF-16]
  • 문자 배열 포인터 해제
    • ReleaseStringUTFChars() [UTF-8]
    • ReleaseStringChars() [UTF-16]
  • 문자수
    • GetStringUTFLength() [UTF-8]
    • GetStringLength() [UTF-16]
  • 자바문자열생성
    • NewStringUTF() [UTF-8]
    • NewString [UTF-16]

함수명을 보면 알 수 있듯이 UTF-8 용 함수에는 UTF라는 명이 함수명에 들어간다.

이 함수를 활용하는 예제로 자바 문자열을 전달받아서 콘솔에 출력하는 예제를 작성해 본다. 

코드를 컴파일하고 라이브러리로 만든다.

이 라이브러리를 사용하는 자바 코드를 작성한다.

컴파일하고 사용해 본다.

 

Share on FacebookTweet about this on TwitterShare on Google+Share on RedditEmail this to someone