• jni基础


    学习hadoop的过程中涉及到了jni,了解了下jni的原理:

    jni,java native interface,它弥补了JAVA的与平台无关这一优点的不足,在JAVA实现跨平台的同时,也能与其它语言(如C、C++)的动态库进行交互,给其它语言发挥优势的机会。应用于性能要求高,有系统调用的时候。

    具体步骤:

    jni

    创建TestJni.java

    public class TestJni
    {
        public native void print(String str);
        static
        {
            System.loadLibrary("MyJni");
        }
        public static void main(String[] args)
        {
            new TestJni().print("hello jni");
        }
    }

    print()方法是一个native方法,是要用C语言去实现的,在static块中,指定加载需要的*.so。

    编译TestJni.java得到class文件,从class文件得到头文件:javah –jni TestJni,得到TestJni.h,复制TestJni.h->MyJni.c:

    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>             
    #include <stdio.h>
    /* Header for class TestJni */
    
    #ifndef _Included_TestJni
    #define _Included_TestJni
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     TestJni
     * Method:    print
     * Signature: (Ljava/lang/String;)V
     */
    JNIEXPORT void JNICALL Java_TestJni_print
      (JNIEnv *env, jobject obj, jstring str)
    {
         jchar *s = (jchar *)(*env)->GetStringUTFChars(env, str, NULL);
        printf("content is %s
    ", (char *)s);
         (*env)->ReleaseStringUTFChars(env, str,(const char*)s);
    }
    
    #ifdef __cplusplus
    }
    #endif
    #endif

    得到libMyJni.so:   gcc -fPIC -shared -o libMyJni.so MyJni.c -I. -I/usr/java/jdk1.7.0_75/include -I/usr/java/jdk1.7.0_75/include/linux,加载相应的include的文件,执行java –Djava.library.path=. TestJni:

    content is hello jni
  • 相关阅读:
    [原]实例-简单设计&精简代码&复用代码
    [原创]实例-少用单例及降低耦合
    c#实现数据集合转换为csv文本
    [转]SqlServer索引的原理与应用
    [转]AngularJS:何时应该使用Directive、Controller、Service?
    [转]AngularJS移动开发中的坑汇总
    [转]Hibernate对象的三种状态
    [转]AngularJS Cookies Example
    [转]LESS CSS 框架简介
    [转]为ReportViewer导出的PDF文档加上水印
  • 原文地址:https://www.cnblogs.com/dslover/p/4315523.html
Copyright © 2020-2023  润新知