JNI的数据类型

转载 2013年12月04日 13:27:55

转自:http://www.cnblogs.com/skywang12345/archive/2013/05/23/3094037.html




1 基本数据类型

为了使用方便,JNI还提供了以下定义:

#define JNI_FALSE 0
#define JNI_TRUE  1

typedef jint jsize;

 

2 引用类型

 

3 数组类型

 

4 Java虚拟机类型

将JNI注册到Java时,会首先注册到Java虚拟机。Java虚拟机的类型如下表:

说明:

(01) L fully-qualified-call; 

示例:"Ljava/lang/String;",它在Java虚拟机中表示“Java中的java.lang.String”对应的类型。

注意:fully-qualified-call必须对应完整的java路径,且用“/”分格。

(02) [ type

示例:"[I",表示int[]类型的数组。

(03) (arg-types) return-type

示例:"(Ljava/lang/String;)I",表示参数是string类型,返回值是int类型。

 

理解上面这些基本类型之后,我们再来介绍“JNINativeMethod 结构体”。这是JNI编程中非常重要的一个结构体!

 

5 JNINativeMethod 结构体

5.1 JNINativeMethod定义

typedef struct {  

    const char* name; 
    const char* signature; 
    void* fnPtr; 
} JNINativeMethod;

name:Java中函数的名字。
signature:Java中函数的参数和返回值。一般的形式是"(arg-types)return-type":arg-types对应是参数类型,空白表示没有参数;return-type是返回值类型,不能是空白,若返回void,则应该设置return-type为V。
fnPtr:指向native函数的函数名称。前面都要接 (void *)

5.2 JNINativiMethod的示例

// Java和JNI函数的绑定表
static JNINativeMethod method_table[] = {
    { "stringFromJni"   , "()Ljava/lang/String;"  , (void*)stringFromJni  },
    { "stringToJni"     , "(Ljava/lang/String;)V" , (void*)stringToJni    },
};

stringFromJni、stringToJni在Java和JNI中的声明分明如下:

复制代码
// stringToJni对应在Java中的声明
private native String stringFromJni();
// stringToJni对应在JNI中的声明
JNIEXPORT jstring JNICALL stringFromJni(JNIEnv *env, jobject clazz);

// stringToJni对应在Java中的声明
private native void stringToJni(String val);
// stringToJni对应在JNI中的声明
JNIEXPORT void JNICALL stringToJni(JNIEnv *env, jobject clazz, jstring val);
复制代码

1 基本数据类型

为了使用方便,JNI还提供了以下定义:

#define JNI_FALSE 0
#define JNI_TRUE  1

typedef jint jsize;

 

2 引用类型

 

3 数组类型

 

4 Java虚拟机类型

将JNI注册到Java时,会首先注册到Java虚拟机。Java虚拟机的类型如下表:

说明:

(01) L fully-qualified-call; 

示例:"Ljava/lang/String;",它在Java虚拟机中表示“Java中的java.lang.String”对应的类型。

注意:fully-qualified-call必须对应完整的java路径,且用“/”分格。

(02) [ type

示例:"[I",表示int[]类型的数组。

(03) (arg-types) return-type

示例:"(Ljava/lang/String;)I",表示参数是string类型,返回值是int类型。

 

理解上面这些基本类型之后,我们再来介绍“JNINativeMethod 结构体”。这是JNI编程中非常重要的一个结构体!

 

5 JNINativeMethod 结构体

5.1 JNINativeMethod定义

typedef struct {  

    const char* name; 
    const char* signature; 
    void* fnPtr; 
} JNINativeMethod;

name:Java中函数的名字。
signature:Java中函数的参数和返回值。一般的形式是"(arg-types)return-type":arg-types对应是参数类型,空白表示没有参数;return-type是返回值类型,不能是空白,若返回void,则应该设置return-type为V。
fnPtr:指向native函数的函数名称。前面都要接 (void *)

5.2 JNINativiMethod的示例

// Java和JNI函数的绑定表
static JNINativeMethod method_table[] = {
    { "stringFromJni"   , "()Ljava/lang/String;"  , (void*)stringFromJni  },
    { "stringToJni"     , "(Ljava/lang/String;)V" , (void*)stringToJni    },
};

stringFromJni、stringToJni在Java和JNI中的声明分明如下:

复制代码
// stringToJni对应在Java中的声明
private native String stringFromJni();
// stringToJni对应在JNI中的声明
JNIEXPORT jstring JNICALL stringFromJni(JNIEnv *env, jobject clazz);

// stringToJni对应在Java中的声明
private native void stringToJni(String val);
// stringToJni对应在JNI中的声明
JNIEXPORT void JNICALL stringToJni(JNIEnv *env, jobject clazz, jstring val);
复制代码

jni数据类型转换

  • 2017年02月05日 15:21
  • 6.36MB
  • 下载

Java与JNI数据类型对照表

  • 2015年04月14日 14:38
  • 185KB
  • 下载

JNI学习积累之二 ---- 数据类型映射、域描述符说明

本文原创,转载请注明出处:http://blog.csdn.net/qinjuning     在Java存在两种数据类型: 基本类型 和 引用类型 ,大家都懂的 。 ...

jni数据类型转换

  • 2012年08月06日 23:44
  • 44KB
  • 下载

JNI 对象处理和数据类型转换

作者:陈波 2011/10/30(转载请注明出处,From:http://blog.csdn.net/jinhill/article/details/6918821) 最近做Android开发的人越...
  • woshinia
  • woshinia
  • 2014年05月06日 15:20
  • 14961

JNI 中 JAVA 与 C 数据类型装换 (2)

1、基本数据类型 下面一张表是描述了 Java 基本数据类型和JNI中基本数据类型的相对应关系已经占用空间大小。 随便观察就能发现,其实就基本数据类型而已,JNI基本数据类型只是比Java基本数...
  • yan8024
  • yan8024
  • 2014年01月20日 20:22
  • 632

(一)JNI学习之C语言基础,基本数据类型

一、JNI的介绍 JNI:Java Native Interface(java本地接口),其实就是让java跟C/C++互调的过程的一个规范。 所以要掌握这项技术,我们就必须了解C/C++语言的基础知...

Android NDK学习笔记6-JNI对引用数据类型的操作

字符串操作    JNI把Java字符串当成引用类型来处理,JNI提供了java字符串与C字符串之间相互转换的必要函数。因为java字符串对象是不可变的,因此JNI不提供任何修改现有的java字符串内...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JNI的数据类型
举报原因:
原因补充:

(最多只允许输入30个字)