【精选】JNI 数据类型.pdfVIP

  • 2
  • 0
  • 约8.2千字
  • 约 6页
  • 2017-12-07 发布于贵州
  • 举报
【精选】JNI 数据类型

Java 1.1 开始,Java Native Interface (JNI)标准成为java 平台的一部分,它允许Java 代码和其他语言写的代码进行交互。JNI 一开始是为了本地已编译语言,尤其是C 和C++ 而设计 的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。让我们看一 些使用JNI 的简单例子吧。 使用java 与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做 是可以接受的,甚至是必须的,比如,使用一些旧的库,与硬 、操作系统进行交互,或者 为了提高程序的性能。JNI 标准至少保证本地代码能工作在任何Java 虚拟机实现下。 开始: 如果你习惯了使用JNI,你就不会觉得它难了。既然本地方法是由其他语言实现的,它们在 Java 中没有函数体。但是,所有本地代码必须用本地关键词 声明,成为Java 类的成员。 清单A 演示了一个简单的类,它申明了一个本地的 (native ),静态的(static )方法:sum。 写完了你的Java 类,接下来就要写本地代码。本地方法符号提供一个满足约定的头文 , 使用Java 工具可以很容易地创建它而不用手动去创建。你对 Java 的class 文 使用javah 命令,就会为你生成一个对应的C/C++头文 。清单B 就是为清单A 的Test1 类创建的头 文 。注意:它创建了 一个C/C++函数:Java_Test1_sum。 执行本地方法: 一旦你有了这个头文 ,你就需要写头文 对应的本地方法,就像我在清单C 做的那样。 注意:所有的本地方法的第一个参数都是指向JNIEnv 结构的。 这个结构是用来调用JNI 函数的,(我会在另一个章节中讨论)。第二个参数jclass 的意义,要看方法是不是静态的 (static)或者实例 (Instance )的。前者,jclass 代表一个类对象的引用,而后者是被调 用的方法所属对象的引用。最后的两个j int 参数表示了Java 方法的 int 参数。 返回值和参数类型根据等价约定映射到本地C/C++类型,如表A 所示。有些类型,如清单 B 里面的两个j int 参数,在本地代码中可直接使用,而其他类型只有通过JNI 调用操作。 表A Java 类型 本地类型 描述 boolean j boolean C/C++8 位整型 byte j byte C/C++带符号的8 位整型 char jchar C/C++无符号的16 位整型 short jshort C/C++带符号的16 位整型 int ji nt C/C++带符号的32 位整型 long jlong C/C++带符号的64 位整型e float jfloat C/C++32 位浮点型 double jdouble C/C++64 位浮点型 Object jobject 任何Java 对象,或者没有对应java 类型 的对象 Class jclass Class 对象 String jstring 字符串对象 Object[] jobjectArray 任何对象的数组 boolean[] j booleanArray 布尔型数组 byte[] j byteArray 比特型数组 char[] jcharArray 字符型数组 short[] jshortArray 短整型数组 int[] ji ntArray 整型数组 long[]

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档