首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Linux频道
中国IT教育
Google
首页 资讯动态 认证考试 新手入门 核心技术 高级技术 J2EE J2ME Java&XML 开源技术 其他技术 RSS订阅 论坛 专题
您现在的位置: 中国IT实验室 >> Java >> 新手入门 >> 基础入门 >> 正文

java基础知识:KVM的扩展

   3.8 数组操作

    3.8.1 jsize KNI_GetArrayLength(jarray arrayHandle)

    取得数组长度。

    3.8.2 <NativeType> KNI_Get<Type>ArrayElement(<ArrayType>arrayHandle, jint index)

    取得<Type>类型数组元素。

    3.8.3 void KNI_Set<Type>ArrayElement(<ArrayType>arrayHandle, jint index, <NativeType> value)

    设置<Type>类型数组元素。

    3.8.4 void KNI_GetObjectArrayElement(jobjectArray arrayHandle, jint index, jobject toHandle)

    取得对象数组元素。

    3.8.5 void KNI_SetObjectArrayElement(jobjectArray arrayHandle, jint index, jobject fromHandle)

    设置对象数组元素。

    3.8.6 void KNI_GetRawArrayRegion(jarray arrayHandle, jsize offset, jsize n, jbyte* dstBuffer)

    以字节为单位读取一个区域的值。

    3.8.7 void KNI_SetRawArrayRegion(jarray arrayHandle, jsize offset, jsize n, const jbyte* srcBuffer)

    以字节为单位设置一个区域的值。

    3.9 参数传递

    KNI的参数传递方式有一些不同的地方,在进行KNI调用时,从Java层传来的参数在本地函数中不能直接读取到。所有本地的函数,不论在Java层声明时有多少个参数,它的参数表都将为空。这是因为KNI在虚拟机的内部,虚拟机在调用Java方法的时候是以堆栈的形式传参的,在调用KNI方法的时候也是用了之种方式。

    好在KNI的设计原则之一是“与虚拟机细节相隔离”,所以KNI的使用者不必去学习虚拟机的堆栈式传参,KNI已经封装好了一些方便使用的函数。

    同样,函数的返回值也要用专门的函数来传回。

    3.9.1 <ReturnType> KNI_GetParameterAs<Type>(jint index)

    取得类型为<Type>的第index个参数,index是此参数在Java方法参数表中的位置。

    比如:void native func (int i, long l, int j);这个Java方法有三个参数,在它的本地方法中,要得到它的第一个参数就要做如下调用:

    KNI_GetParameterAsInt(1);

    注意,long和double型的参数比较长,要占两个位置,所以最后一个参数的序号不是3而是4.

    3.9.2 void KNI_GetParameterAsObject(jint index, jobject toHandle)

    同理,本函数读取index处的对象,并使用toHandle句柄来索引它。

    3.9.3 void KNI_GetThisPointer(jobject toHandle)

    读取当前类的this对象的句柄。

    3.9.4 void KNI_GetClassPointer(jclass toHandle)

    读取当前类的句柄。

    3.9.5 void KNI_ReturnVoid()

    用于void型函数的返回。

    3.9.6 void KNI_Return<Type>(<NativeType> value)

    用于<Type>型函数的返回。

    3.10 名柄操作

    KNI中对于Java传来的对象的引用,不能直接使用C语言的指针,这是因为KNI在虚拟机内部,C层的函数中所引用的对象也还是会参与垃圾收集,随时有可能被移动,C层的指针指向的是绝对的内存位置,就会失效。所以KNI使用“句柄”来索引对象,句柄由虚拟机来维护,不会失效。

    3.10.1 void KNI_StartHandles(n)

    声明在当前函数中所要使用的句柄数,要使用多少句柄,都需要事先声明。

    3.10.2 void KNI_DeclareHandle(handle)

    声明一个句柄。

    3.10.3 jboolean KNI_IsNullHandle(handle)

    判断句柄是否为空。

    3.10.4 jboolean KNI_IsSameObject(handle1, handle2)

    判断两句柄是否指向了同一个对象。

    3.10.5 void KNI_ReleaseHandle(handle)

    释放句柄。

    3.10.6 void KNI_EndHandles()

    删除句柄。

    3.10.7 void KNI_EndHandlesAndReturnObject(jobject objectHandle)

    删除句柄并把句柄所指向的对象作为函数值返回。

 

上一页  [1] [2] [3] [4] 下一页

【责编:Peng】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 ·Java入门 Tomcat的配置技巧精华专题…
 ·Oracle RMAN物理备份技术详解…
 今日更新
 社区讨论
 博客论点
 频道精选
 Java 频道导航