下载本文示例代码
摘要 Jace是一种免费的开放源代码的工具,它使我们能够轻松地开发JNI(Java本机接口)代码。本篇文章详细地分析了JNI API的问题,以及如何使用Jace解决这些问题。 如果没有更深的了解,我们一定会以为Sun设计JNI的目的是为了不让Java编程人员使用它。毕竟,类型安全形同虚设,缺乏错误检查机制,进行一次简单的Java方法调用需要4次或更多的JNI调用,这都是JNI明显的不足之处。另外,我们还必须管理JNIEnv指针,不能在多个线程中使用JNI调用,必须为每种可能的操作在9个函数调用中进行选择,而且异常信息的获取也非常地困难。这还只是JNI所出现问题的一部分,我们还能发现许多其他问题。 这些限制中的许多部份都与JNI与C语言的绑定有关,C语言本身对类型安全、异常处理机制的支持也非常不好。尽管目前大多数的编程人员都已经能够使用C 编写代码,但Sun没有放弃C编程人员,这也是JNI目前这种状况的原因。不幸的是,这种很难使用的API给开发人员带来了许多困难。 Jace是一款免费的开放源代码的工具包,旨在使JNI编程变得更加简单。它支持由Java类文件自动生成C 代理类以及C 与Java的异常、数组、包、对象的整合,管理Java引用的线程绑定和生命周期。更为重要的是,它能够使我们开发更小、更易于理解、在编译时类型安全的模块。
JNI的类型系统 Jace最基本的特点是它使用C 代理类来表达Java类型。为了真正地理解代理类的优点,我们首先需要来看看JNI的类型系统。Sun在JNI中使用了24种C类型来表示所有可能的Java类型。JNI包含有9个简单类型: ·jboolean ·jbyte ·jchar ·jshort ·jint ·jlong ·jdouble ·jfloat ·void JNI有14种引用类型,如下图所示:
(图:picture01)
另外,JNI有一个复合型的类型jvalue,它能够表达所有的简单和引用类型。 Jace类型系统 图2表示基本的Jace数据类型的类图表。这些类是我们访问Jace运行时间库的简单的接口,它与JNI的数据类型对应非常紧密。
(图:picture02)
Jace的数据类型系统是直接以24种JNI数据类型为基础的,对于每一种JNI数据类型而言,Jace都有一个相应的C 代理类。9种JNI简单数据类型以及jvalue、jclass、jobject、jstring和jthrowable都直接映射为相应的Jace代理类,JNI的jarray数据类型以及9个派生的数组数据类型都被映射为一种基于模板的JArray数据类型。在下面的部分中,我们将对每种C 代理类进行详细的解释。共3页。 1 2 3 :
摘要 Jace是一种免费的开放源代码的工具,它使我们能够轻松地开发JNI(Java本机接口)代码。本篇文章详细地分析了JNI API的问题,以及如何使用Jace解决这些问题。 如果没有更深的了解,我们一定会以为Sun设计JNI的目的是为了不让Java编程人员使用它。毕竟,类型安全形同虚设,缺乏错误检查机制,进行一次简单的Java方法调用需要4次或更多的JNI调用,这都是JNI明显的不足之处。另外,我们还必须管理JNIEnv指针,不能在多个线程中使用JNI调用,必须为每种可能的操作在9个函数调用中进行选择,而且异常信息的获取也非常地困难。这还只是JNI所出现问题的一部分,我们还能发现许多其他问题。 这些限制中的许多部份都与JNI与C语言的绑定有关,C语言本身对类型安全、异常处理机制的支持也非常不好。尽管目前大多数的编程人员都已经能够使用C 编写代码,但Sun没有放弃C编程人员,这也是JNI目前这种状况的原因。不幸的是,这种很难使用的API给开发人员带来了许多困难。 Jace是一款免费的开放源代码的工具包,旨在使JNI编程变得更加简单。它支持由Java类文件自动生成C 代理类以及C 与Java的异常、数组、包、对象的整合,管理Java引用的线程绑定和生命周期。更为重要的是,它能够使我们开发更小、更易于理解、在编译时类型安全的模块。
JNI的类型系统 Jace最基本的特点是它使用C 代理类来表达Java类型。为了真正地理解代理类的优点,我们首先需要来看看JNI的类型系统。Sun在JNI中使用了24种C类型来表示所有可能的Java类型。JNI包含有9个简单类型: ·jboolean ·jbyte ·jchar ·jshort ·jint ·jlong ·jdouble ·jfloat ·void JNI有14种引用类型,如下图所示:
(图:picture01)
另外,JNI有一个复合型的类型jvalue,它能够表达所有的简单和引用类型。 Jace类型系统 图2表示基本的Jace数据类型的类图表。这些类是我们访问Jace运行时间库的简单的接口,它与JNI的数据类型对应非常紧密。
(图:picture02)
Jace的数据类型系统是直接以24种JNI数据类型为基础的,对于每一种JNI数据类型而言,Jace都有一个相应的C 代理类。9种JNI简单数据类型以及jvalue、jclass、jobject、jstring和jthrowable都直接映射为相应的Jace代理类,JNI的jarray数据类型以及9个派生的数组数据类型都被映射为一种基于模板的JArray数据类型。在下面的部分中,我们将对每种C 代理类进行详细的解释。共3页。 1 2 3 :
下载本文示例代码
用Jace整合Java和C 用Jace整合Java和C 用Jace整合Java和C 用Jace整合Java和C 用Jace整合Java和C 用Jace整合Java和C 用Jace整合Java和C 用Jace整合Java和C 用Jace整合Java和C 用Jace整合Java和C 用Jace整合Java和C 用Jace整合Java和C 用Jace整合Java和C 用Jace整合Java和C 用Jace整合Java和C
阅读(215) | 评论(0) | 转发(0) |