首页
首页
沸点
课程
直播
活动
竞赛
商城
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
JNI
大胃粥
创建于2021-05-26
订阅专栏
JNI全面学习
等 11 人订阅
共10篇文章
创建于2021-05-26
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
JNI异常
JNI没有异常处理机制,也就是没有Java那一套 try-catch-finally。这样做,一方面是为性能,另一方面是因为在某些情况下,没有足够的运行时类型信息来提供异常检测。因此我们有责任保证不使用空指针,不传入不合法参数。 然而,JNI提供了一系列的函数,用于检测是否有异…
JNI 局部引用和全局引用
Java 和 JNI 之间,传递基本类型对象的方式是值复制,而传递引用类型对象的方式是通过引用。在 JNI 中,有二种引用,局部引用(Local Reference)、全局引用(Global Reference)。弱全局引用(Weak Global Reference)是全局引…
JNI jstring 操作
通过前面的文章我们知道,jstring 是 Java String 在 JNI 中的代表,但是在 JNI 中,操作 jstring 的方法很少。通常是把 jstring 转换为 char 指针来操作( C语言方式 ),或者把 char 指针转换为 C++ 的 string 类。…
JNI引用类型数组操作
上篇文章JNI基本类型数组操作讲述了如何在JNI层操作基本类型的数组,本片文章承继上篇文章来讲解如何在JNI层操作引用类型的数组。 在讲解之前呢,需要做一些准备工作。 ArrayTest.java的main()方法中创建一个了Person数组,并给每个元素赋值,然后调用了say…
JNI基本类型数组操作
从这个图中可以看出,引用类型中有一种比较特殊的类型--数组,在JNI层中有好多个类型相对应,例如int[]对应于jintArray,String[]对应于jobjectArray。 从上图中其实还可以看到的一点是,JNI中对数组的处理也分为基本类型和引用类型。由于篇幅关系,本文…
JNI访问Java类的静态成员
上篇文章JNI访问Java对象的成员介绍了如何在JNI层回调Java对象的成员(变量和方法),这篇文章是上篇文章 的姊妹篇,介绍在JNI层如何回调Java类的静态成员(变量和方法)。 首先呢,还是需要做一些准备工作,先完成动态注册的代码。 获取Hello.java类的静态变量m…
JNI访问Java对象的成员
经过前面的几篇文章的学习,我们已经打通了Java层到Native层的通道。Java层调用Native层很简单,只需要调用一个native方法,那么Native层如何回调Java层呢,从这篇文章开始,我们就来探讨这个问题。 Java类的成员(变量和方法)有静态和非静态之分,静态成…
JNI函数动态注册进阶
在 函数动态注册 这篇文章的结尾提到了一个"动态注册"的工作效率问题。当我们在大型的项目中,需要在底层实现一个功能时,我们会在 Java 层声明一个 native 方法,那么在 JNI 层必须有一个本地函数相对应,我们知道"动态注册"的一个好处是可以随意定义函数的名子,函数的类…
JNI函数动态注册
在 不使用IDE做一次JNI开发 一文中,我们使用了"静态注册"的方法建立 Java 世界 native 方法和 Native 世界函数的一一对应关系。 首次调用 Java 的 native 方法,虚拟机会去搜寻对应的 Native 层的函数,这就有点影响执行效率了。如果搜索到…
JNI: 连接Java世界的JavaVM和JNIEnv
在 不使用IDE做一次JNI开发 一文中,我们做了一次从 Java 层到 Native 层的开发。那么,我们能不能反过来,完成一次从 Native 层到 Java 层的开发呢?当然能,不过过程可没那么简单,而掌握 JavaVM 和 JNIEnv 这两个结构体就是关键,这两个结构…