달력

52025  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
제 11회 2011 한국자바개발자 컨퍼런스
Posted by 인천총각
|

Java Jni Test

카테고리 없음 2011. 4. 22. 15:17

Java JNI Test

문단띠로 사각형입니다.

1. HelloWorld

가.  Java

        Test.java

 

public class Test {

        

        public Test(){

                

        }

        static{

                System.loadLibrary("JniTest");

        }

        public native static void getTest();

        

        public static void main(String[] args){

                        Test test = new Test();

                        test.getTest();

        }

}

 

        

나. C++

        Test.cpp

 

#include <jni.h>

#include "Test.h"

#include <iostream>

/*

 * Class:     Test

 * Method:    getTest

 * Signature: ()V

 */

JNIEXPORT void JNICALL Java_Test_getTest  (JNIEnv *, jclass jobj){

 

        std::cout<<"Hello"<<std::endl;

}

 

 


다.  순서

1) javah -jni Test (Test.h 헤더 파일 생성)

2) g++ -c -fPIC -I$JAVA_HOME/include -I$JAVA_HOME/include/linux Test.cpp (Object 생성)

3) g++ -shared -o libJniTest.so Test.o (Dll/SO 파일 생성)

4) java -Djava.library.path=. Test (실행)



2. C++ String 값 받아오기

가.  Java

        com.jni.test,JniTest.java

 

package com.jni.test;

 

public class JniTest {

        

        static{

                System.loadLibrary("JniStringTest");

        }

        public JniTest(){

                String msg= getMessage();

                System.out.println(msg);

        }

        public native static String getMessage();

        

        public static void main(String[] args){

                new JniTest();

        }

}

 

        

나. C++

        Test.cpp

 

#include <jni.h>

#include <stdlib.h>

#include "com_jni_test_JniTest.h"

/* Class:     com_jni_test_JniTest

 * Method:    getMessage

 * Signature: ()Ljava/lang/String;

 */

JNIEXPORT jstring JNICALL Java_com_jni_test_JniTest_getMessage(JNIEnv * env, jclass jobj){

        jstring msg;

        msg = env->NewStringUTF("hhhh");

        return msg;

}


다.  순서

1) javah -jni com.jni.test.JniTest

2) g++ -c -fPIC -I$JAVA_HOME/include -I$JAVA_HOME/include/linux com_jni_test_JniTest.cpp

3) g++ -shared -o libJniStringTest.so com_jni_test_JniTest.o

4) java -Djava.library.path=. com.jni.test.JniTest (실행)




3. C++ String 값 넘기기

가.  Java

        com.jni.test,JniReturnTest.java

 

package com.jni.test;

 

public class JniReturnTest {

 

        static{

                System.loadLibrary("jniReturnTest");

        }

        public static native String getMassageDiff(String msg);

        public static void main(String[] args){

                String msg = JniReturnTest.getMassageDiff("donghun");

                System.out.println(msg);

        }

}

 

 

        

나. C++

        com_jni_test_jniReturnTest.cpp

 

#include <jni.h>

#include <stdlib.h>

#include "com_jni_test_JniReturnTest.h"

JNIEXPORT jstring JNICALL Java_com_jni_test_JniReturnTest_getMassageDiff (JNIEnv * env, jclass jobj,jstring jstr1)

{

        char temp[256] = {0};

        jstring msg;

        char* param=(char*)env->GetStringUTFChars(jstr1,0);

        sprintf(temp,"%s hun",param);

        msg = env->NewStringUTF(temp);

        free(param);

        return msg;

}

 

 


다.  순서

1) javah -jni com.jni.test.JniTest

2) g++ -c -fPIC -I$JAVA_HOME/include -I$JAVA_HOME/include/linux com_jni_test_JniTest.cpp

3) g++ -shared -o libJniReturnTest.so com_jni_test_jniReturnTest.cpp.o

4) java -Djava.library.path=. com.jni.test.JniReturnTest (실행)





Posted by 인천총각
|
String.replace()나 정규표현식을 사용할 때 발생한다.
패턴 스트링에 정규표현식에 사용되는 메타데이타가 포함되어 있을 경우이고
해당 캐랙터는 *, ?, +, [, {, (, }, ^, $에 해당한다.

다음과 같이 escape해서 처리한다.

 patternString = patternString.replaceAll("\\*", "\\\\*");
 patternString = patternString.replaceAll("\\?", "\\\\?");
 patternString = patternString.replaceAll("\\+", "\\\\+");
 patternString = patternString.replaceAll("\\[", "\\\\[");
 patternString = patternString.replaceAll("\\{", "\\\\{");
 patternString = patternString.replaceAll("\\(", "\\\\(");
 patternString = patternString.replaceAll("\\)", "\\\\)");
 patternString = patternString.replaceAll("\\^", "\\\\^");
 patternString = patternString.replaceAll("\\$", "\\\\\\$");

$만 역슬래쉬 갯수가 틀린것에 유의.

Posted by 인천총각
|