当前位置:   article > 正文

JNI数据类型_jni 数据类型

jni 数据类型

JNI数据类型

1JNI(JavaNative Interface),中文为Java本地调用。

2JNI设计目的:允许JAVA代码与其它语言进行交互。

3JNI数据类型和数据结构

1、基本类型

JAVA类型

本地类型

C/C++类型

boolean

jboolean

unsignedchar

byte

jbyte

signedchar

char

jchar

unsignedshort

short

jshort

short

int

jintjsize

int

long

jlong

long(longlong)

float

jfloat

float

double

jdouble

double

void

void

void

2、常用数据类型和指针类型

#ifdef__cplusplus

class_jobject {};

class_jclass : public _jobject {};

class_jthrowable : public _jobject {};

class_jstring : public _jobject {};

class_jarray : public _jobject {};

class_jbooleanArray : public _jarray {};

class_jbyteArray : public _jarray {};

class_jcharArray : public _jarray {};

class_jshortArray : public _jarray {};

class_jintArray : public _jarray {};

class_jlongArray : public _jarray {};

class_jfloatArray : public _jarray {};

class_jdoubleArray : public _jarray {};

class_jobjectArray : public _jarray {};

typedef_jobject *jobject;

typedef_jclass *jclass;

typedef_jthrowable *jthrowable;

typedef_jstring *jstring;

typedef_jarray *jarray;

typedef_jbooleanArray *jbooleanArray;

typedef_jbyteArray *jbyteArray;

typedef_jcharArray *jcharArray;

typedef_jshortArray *jshortArray;

typedef_jintArray *jintArray;

typedef_jlongArray *jlongArray;

typedef_jfloatArray *jfloatArray;

typedef_jdoubleArray *jdoubleArray;

typedef_jobjectArray *jobjectArray;

#else

struct_jobject;

typedefstruct _jobject *jobject;

typedefjobject jclass;

typedefjobject jthrowable;

typedefjobject jstring;

typedefjobject jarray;

typedefjarray jbooleanArray;

typedefjarray jbyteArray;

typedefjarray jcharArray;

typedefjarray jshortArray;

typedefjarray jintArray;

typedefjarray jlongArray;

typedefjarray jfloatArray;

typedefjarray jdoubleArray;

typedefjarray jobjectArray;

#endif

上述数据类型只能和相应的函数配合使用,单独使用没有意义。


3JNI复合型的类型jvalue,它能够表达所有的简单和引用类型,常用于不确定的参数传递。

typedefunion jvalue

{

jbooleanz;

jbyte b;

jchar c;

jshort s;

jint i;

jlong j;

jfloat f;

jdouble d;

jobject l;

}jvalue;

例如: jobject(JNICALL *NewObjectA)

(JNIEnv*env, jclass clazz, jmethodID methodID, const jvalue*args);


4、不透明类型(opaquedatastructure),在头文件只有声明,具体的定义在C/C++源文件中。使用者无法知道该数据类型的大小,所以该数据类型最好以指针的形式来使用;否则会给编码和程序运行带来不确定性。主要类型如下:

struct_jfieldID;

typedefstruct _jfieldID *jfieldID;

jfieldID主要用来储存java端的变量地址

struct_jmethodID;

typedefstruct _jmethodID *jmethodID;

jmethodID主要用来储存java端的方法地址

5JavaC函数的映射表数组

/*

* used in RegisterNatives to describe native method name, signature,

* and function pointer.

*/

typedefstruct {

char*name; //Java中函数的名字。

char*signature; //用字符串是描述了函数的参数和返回值

void*fnPtr; //指向C函数

}JNINativeMethod;

签名字符串和JAVA中的数据类型对应关系如下:

类型签名

Java类型

Z

boolean

B

byte

C

char

S

short

I

int

J

long

F

float

D

double

L

fully-qualified-class(全限定的类)

[

[]

[I

int[]

[F

float[]

[B

byte[]

[C

char[]

[S

short[]

[D

double[]

[J

long[]

[Z

boolean[]


函数签名例子:

1JAVA中的函数定义:

inttestLocalData(int iData, String[] args, int[] iValue);

2、签名表示:

(I[Ljava/lang/String;[I)I

如果Java函数的参数是class,则以"L"开头,以";"结尾中间是用"/"隔开的包及类名。如 JAVA函数参数位于一个嵌入类,则用$作为类名间的分隔符。


6JNI本地方法接口

/*

*JNI Native Method Interface.

*/

structJNINativeInterface_;

structJNIEnv_;

#ifdef__cplusplus

typedefJNIEnv_ JNIEnv;

#else

typedefconst struct JNINativeInterface_ *JNIEnv;

#endif


7JNI调用接口

/*

*JNI Invocation Interface.

*/

structJNIInvokeInterface_;

structJavaVM_;

#ifdef__cplusplus

typedefJavaVM_ JavaVM;

#else

typedefconst struct JNIInvokeInterface_ *JavaVM;

#endif

8、运行Java虚拟机的配置

typedefstruct JavaVMOption {

char*optionString;

void*extraInfo;

}JavaVMOption;

9、初始化JAVA虚拟机参数

typedefstruct JavaVMInitArgs {

jintversion;

jintnOptions;

JavaVMOption*options;

jbooleanignoreUnrecognized;

}JavaVMInitArgs;

10、创建线程的参数

typedefstruct JavaVMAttachArgs {

jintversion;/*JNI version*/

char*name; /* the name of the thread as a modified UTF-8 string, orNULL */

jobjectgroup; /* global ref of a ThreadGroup object, or NULL */

}JavaVMAttachArgs;


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/992660
推荐阅读
相关标签
  

闽ICP备14008679号