快速业务通道

用Jace整合Java和C++ - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23

用Jace整合Java和C++

时间:2010-09-13

摘要

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种引用类型,如下图所示:

用Jace整合Java和C++ - 编程入门网

(图:picture01)

另外,JNI有一个复合型的类型jvalue,它能够表达所有的简单和引用类型。

用Jace整合Java和C++(2)

时间:2010-09-13

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++代理类进行详细的解释。

简单类

9个简单的类可以作为9种JNI的简单数据类型的封装器。我们可以将这些类作为参数,并返回其他C++代理类的值:

/* 获得值为“A String”的java.lang.String的哈希码值 */ JInt hashCode = String( "A String" ).hashCode();

我们也可以将这些类作为JArray类的模板参数:

/* 创建一个大小为512的字节缓冲区 */ JArray<JByte> buffer( 512 );

JValue

JValue是所有代理类的基础类,它能够表达Java所有的简单和引用数据类型。每个JValue有一个JClass,该JClass表示jvalue相应的jclass。我们只能提供一个JNI的jvalue数据类型构建JValue,JValue就成为了jvalue的持有者。大多数开发人员无需与JValues直接打交道。

JClass

JClass表示JNI的数据类型jclass,它提供了访问其jclass和在不同的JNI调用中表示jclass的字符串(例如,java/lang/Object和Ljava/lang/Object)。Jace的框架使用JClass实例提供进行GetMethodID()、GetFieldID()和NewObjectArray()等JNI调用所必需的信息。大多数开发人员无需直接与JClass打交道。

JObject

JObject类表示JNI的数据类型jobject,

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号