JNI 调用注意事项详解
需积分: 10 47 浏览量
更新于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++调用代码示例也需要注意。
2023-03-29 上传
2023-05-27 上传
2023-06-12 上传
2023-09-11 上传
2023-07-10 上传
2023-07-14 上传
2023-03-29 上传
Alex.Ke
- 粉丝: 3171
- 资源: 21
最新资源
- C语言快速排序算法的实现与应用
- KityFormula 编辑器压缩包功能解析
- 离线搭建Kubernetes 1.17.0集群教程与资源包分享
- Java毕业设计教学平台完整教程与源码
- 综合数据集汇总:浏览记录与市场研究分析
- STM32智能家居控制系统:创新设计与无线通讯
- 深入浅出C++20标准:四大新特性解析
- Real-ESRGAN: 开源项目提升图像超分辨率技术
- 植物大战僵尸杂交版v2.0.88:新元素新挑战
- 掌握数据分析核心模型,预测未来不是梦
- Android平台蓝牙HC-06/08模块数据交互技巧
- Python源码分享:计算100至200之间的所有素数
- 免费视频修复利器:Digital Video Repair
- Chrome浏览器新版本Adblock Plus插件发布
- GifSplitter:Linux下GIF转BMP的核心工具
- Vue.js开发教程:全面学习资源指南