Java本地调用JNI使用规范详解.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java本地调用JNI使用规范详解 一、 JNI概述 JavaNative Interface的缩写,中文为Java本地调用。从Java1.1开始,JNI即成为Java标准的一部分。 JNI设计的目的是为了允许Java代码与其他语言进行交互。但这样做通常会导致丧失平台可移植性,通常是在特定的需求下进行,例如使用旧的其他语言的库、需要获得Java类库不支持的某种基于具体平台的特性、大量数学计算性能优化等。 二、 JNI数据类型和数据结构 1.基本类型 JNI基本类型和本地等效类型的对应表格如下: Java类型 本地类型 说明 boolean jboolean 无符号,8位 byte jbyte 无符号,8位 char jchar 无符号,16位 short jshort 有符号,16位 int jint 有符号,32位 long jlong 有符号,64位 float jfloat 32位 double jdouble 64位 void void 无 为了使用方便,还提供了如下定义: #define JNI_FALSE 0 #define JNI_TRUE 1 Jsize类型用于描述主要指数和大小: typedef jint jsize; 2.引用类型 除了基本类型外,JNI还包含了很对对应于不同Java对象的引用类型,JNI引用类型的组织层次如下图所示: 在C语言中,所有其他JNI引用类型都被定义为与jobject一样,例如: typedef jobject jclass; 在C++中,JNI引入虚构类以加强子类关系,例如: class _jobject{}; class _jstring : public jobject{}; … typedef _jobject jobject; typedef _jstring jstring; 3.方法ID和域ID 方法ID和域ID是常规的C指针类型: struct_jmethodID; /*不透明结构*/ typedefstruct _jmethodID *jmethodID; /*方法ID*/ struct_jfieldID; /*不透明结构*/ typedefstruct _jfieldID *jfieldID /*域ID*/ 4.值类型 jvalue联合在参数数组中用作单元类型,其声明如下: typedefunion _jvalue { jboolean z; jbyte b; jchar c; jshort s; jint i; jlong j; jfloat f; jdouble d; jobject l; }jvalue; 5.UTF8字符串 JNI的UTF8字符串与标准UTF8格式有两个区别,第一,空字节0使用双字节格式进行编码,而不是标准UTF8的单字节;第二,只使用单字节、双字节和三字节格式,不支持更长的字节格式。 三、 JNI接口函数命名方式 1. 类型签名 Java虚拟机的类型签名如下: 类型签名 Java类型 Z boolean B byte C char S short I int J long F float D double Lfully-qulitied-class; 全限定类 [type type[] 数组 (argtypes)rettype 方法类型 例如,Java方法int feet(int n, String s,int [] arr)的类型签名如下: (ILJava/lang/String;[I)I 圆括号里面为参数,I表示第一个参数int型,LJava/lang/String;表示第二个参数为全限定Java.lang.String类型,[I表示第三个参数为int型的数组,圆括号后面为返回值类型,I表示返回值为int型。 2. 一般函数的JNI接口函数命名方式 一般JNI接口函数命名如下: Java_包名_类名_方法名。 例如:某工程下Sample/test包下MySigal类的int GetASample()方法的C语言实现函数命名如下: jint Java_Sample_test_MySigal_GetASample(JNIEnv* env,jobjectobj) 其中,包名所包含的“/”应全部以下划线替代,其本地实现的参数和返回值也应转换为JNI类型。 3. 重载函数的JNI接口函数命名方式 重载函数的JNI实现在一般函数的JNI实现之外,还应添加上类型签名以作为同名函数之间的区别,其接口函数命名如下: Java_包名_类名_方法名_参数签名。 例如:某工程下Sample/test包下MySigal类的int GetASample(int n, String s

文档评论(0)

文档终结者 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档