JNI 调用注意事项详解
需积分: 10 105 浏览量
更新于2024-07-23
收藏 116KB DOC 举报
JNI 调用注意事项
JNI(Java Native Interface)是一种允许Java代码与本地代码进行交互的技术。JNI 方法调用时有一些需要注意的事项,以避免出现不必要的错误。
**基本类型**
在JNI中,Java基本类型及其对应的本地类型如表3-1所示。需要注意的是,Java基本类型在本地代码中的表示方式。
表3-1基本类型和本地等效类型
| 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 | N/A |
**值类型**
在JNI中,jvalue联合类型用于描述值类型。jvalue类型的声明方式如下:
typedef union jvalue {
jboolean z;
jbyte b;
jchar c;
jshort s;
jint i;
jlong j;
jfloat f;
jdouble d;
jobject l;
} jvalue;
**引用类型**
在JNI中,引用类型用于描述对象的引用。对象的引用可以是局部变量、方法参数或字段等。
**函数命名**
在JNI中,函数命名需要遵守一定的规则。虚拟机将为本地库中的方法查找匹配的方法名。它首先查找短名(没有参数签名的名称),然后再查找带参数签名的长名称。只有当某个本地方法被另一个本地方法重载时,程序员才有必要使用长名。
例如,以下代码中,不必用长名来链接本地方法g,因为另一个方法g不是本地方法,因此它并不在本地库中。
class Cls1 {
int g(int i);
native int g(double d);
}
**Unicode字符转换**
在JNI中,Unicode字符需要转换为有效的C函数名。我们采取简单的名字搅乱方案,以保证所有的Unicode字符都能被转换为有效的C函数名。我们用下划线(“_”)字符来代替全限定的类名中的斜杠(“/”)。由于名称或类型描述符从来不会以数字打头,我们用_0、_1、_2、_3来代替转义字符序列,如表2-1所示:
表2-1 Unicode字符转换
| 转义字符序列表示 |
| --- |
| _0XXXX | Unicode字符XXXX |
| _1 | 字符“_” |
| _2 | 签名中的字符“;” |
| _3 | 签名中的字符“[” |
**注意事项**
当native方法有重名时,请写完全限制名区分。此外,c、c++调用代码示例也需要注意。
2019-03-16 上传
2014-12-17 上传
2013-10-18 上传
2019-08-10 上传
2018-01-07 上传
2018-01-25 上传
2012-03-15 上传
Alex.Ke
- 粉丝: 3230
- 资源: 21
最新资源
- 对Atom-IDE的Python语言支持:atom::snake:-JavaScript开发
- Python库 | flaskmodificado-0.1.tar.gz
- ThoughtFlow-Sys-开源
- matlab开发-parTicToc.zip
- weixin034微信课堂助手小程序+php(源码+部署说明+演示视频+源码介绍+lw).rar
- django-sphinxql:Django中的Sphinx搜索
- 创业计划书-电梯项目可行性研究报告(目录)
- Dubhe-master.zip
- 基于ASP上网导航设计(论文+源码+毕业设计).rar
- weixin083校园工会体育报名系统+ssm(源码+部署说明+演示视频+源码介绍+lw).rar
- (【收网店学徒vx_25315702】)30套.zip
- Autodesk AutoCAD .Net Interop-开源
- matlab开发-地下磁感应通信和定位的影响和矿物.zip
- 创业计划书-艺术培训策划书
- scribe.js-amqp-aggregator:AMQP + Scribe.js 用于轻量级日志管理
- 一个集中式系统,用于在网页上的任意位置显示和设置焦点指示符。-JavaScript开发