Java使用JNI与C/C++代码实现混合编程
来源:互联网 发布:淘宝客推广招聘 编辑:程序博客网 时间:2024/06/05 04:00
JNI是Java代码和C/C++代码通信的桥梁,其角色在某种意义上就是一个翻译员,从设计模式来看叫适配器。
两者的沟通,首要的一定要对嘴型,对channel,沟通才能到位。计算机程序的基本组成,从狭义来讲,就是数据结构+算法。由于Java和C/C++是两种不同的编程语言,它们各自拥有自家定义的数据类型和结构。JNI的第一步就是统一转换其中一方的数据类型,这就好比我们跟外国友人沟通,我们得说英语一样子。下表是Java的8大基本类型,在Jni层对应的数据描述:
Java Native(jni.h)boolean jbooleanbyte jbytechar jcharshort jshortintjintlong jlongfloatjfloatdouble jdouble
复杂一点的对象类型,其对应的数据描述如下图:
这里补充说明一下:
- Java中的返回值void和JNI中的void是完全对应的
- Java中的基本数据类型(boolean, byte, char, short, int, long, float, double),在JNI中对应的数据类型只要在前面加上 j 就对应了(jboolean, jbyte, jchar, jshort, jint, jlong, jfloat, jdouble)
- Java中的对象,包括类库中定义的类、接口以及自定义的类接口,都对应于JNI中的 jobject
- Java中基本数据类型的数组对应与JNI中的 jarray 类型。(type就是上面说的8种基本数据类型)
- Java中对象的数组对应于JNI中的 jobjectArray 类型。(在Java中一切对象、接口以及数组都是对象)
关于数据类型的转换,JNI还提供的强悍的函数库来支持。对于基本的类型的转换,我们先来复习一下,先关注一下Java基本类型的精度。
类型字节数范围/精度float432位IEEE754单精度double864位IEEE754双精度byte1-128到127short2-32,768到32,767int4-2,147,483,648到2,147,483,647long8-9,223,372,036,854,775,808到9,223,372,036,854,775,807char2整个Unicode字符集boolean1True或者false
Java 的基本数据类型是不存在有符号和无符号这种概念的,它们的取值范围是固定的,不会随着机器硬件环境或者操作系统的改变而改变。
像 byte 的范围是 -128 到 127,你想要变为 0到255 怎么办,,跟 0XFF 做与运算就可以了:b & 0XFF
如 byte b ,如果你想赋值它值 255,那是不行的, 就算赋值了,b的值也是 255 对 256 求模后的值 -1,即 b = -1, 然后 b & 0XFF 结果即为 255,这个与运算后的结果会隐式转换为int 类型的, 因为 byte 放不下了,与运算还是很快的,,比加减法还快的。
所以Jni层使用Java的基本类型数据,对于上面八种基本的数据类型,jni层的c/c++代码可以用强制直接转换成对应长度的c/c++类型数据。
C代码:
如:unsigned char tmp = (unsigned char) m_jboolean; unsigned short tmp = (unsigned short) m_jchar; 或者同长度类型的数据,可以直接赋值,int tmp = m_jint;
阅读全文
0 0
- Java使用JNI与C/C++代码实现混合编程
- 使用JNI进行Java与C/C++语言混合编程
- 使用JNI进行Java与C/C++语言混合编程(2)--在C/C++中调用Java代码
- 使用JNI进行混合编程:在C/C++中调用Java代码
- 使用JNI进行混合编程:在C/C++中调用Java代码
- 【转】使用JNI进行混合编程:在C/C++中调用Java代码
- java c语言混合编程 jni
- 使用JNI进行Java与C/C++语言混合编程(1)--在Java中调用C/C++本地库
- 使用JNI进行Java与C/C++语言混合编程(1)--在Java中调用C/C++本地库
- 使用JNI进行Java与C/C++语言混合编程(1)--在Java中调用C/C++本地库
- 使用JNI进行混合编程:在C/C++中调用Java代码--------------------cocos2d-x 3.0正式版本(7.5)
- 使用IBM Java Toolbox实现Java/C混合编程
- 《Android系统学习》之JAVA与C混合编程——JNI
- 《Android系统学习》之JAVA与C混合编程——JNI
- Android NDK混合使用java和C/C++代码--Hello JNI
- 使用JNI进行混合编程:在Java中调用C/C++本地库
- 使用JNI进行混合编程:在Java中调用C/C++本地库
- 使用JNI进行混合编程:在Java中调用C/C++本地库
- 线性代数 -- 正交向量与子空间
- 初识smartGit
- Go语言学习笔记(六)接口
- poj 1815 最小点割集
- Linux的管道命令竖线(|)
- Java使用JNI与C/C++代码实现混合编程
- HDU 6138 2017多校第八场1006 Fleet of the Eternal Throne :AC自动机
- 单词的整体倒置
- 【Tomcat 8.0】两种方法配置servlet虚拟目录
- POJ3268Silver Cow Party
- 反向代理
- HTML备忘录
- 算法 网站 收藏
- 【HDU 1166】敌兵布阵(树状数组)