
JNI笔记
CoffeeCode
Code can be the same, you can't...
展开
-
JIN_目录简介
这篇是关于观看传智播客 王择佑 录制的 《JNI教程》 之后,想到通过笔记的形式记录每一讲的内容和学习中遇到的问题。(只做为笔记的记录和交流之用) 这套视频一共是六讲(可以到官网进行下载),本篇是对以后每篇笔记的记录、以及汇总:一、Java调用C/C++代码 : http://www.fomagic.com/index.php/232.html二、C++访问J原创 2014-09-11 11:17:56 · 855 阅读 · 0 评论 -
六、(1)JNI中的三种引用
局部引用、全局引用、弱全局引用1、从Java虚拟机创建的对象传到C/C++代码时会产生引用,根据Java的垃圾回收机制,只要有引用存在就不会触发该引用指向的Java对象的垃圾回收2、这些引用在JNI 中分为3种全局引用 (Global Reference)局部引用 (Local Reference)弱全局引用 (Week Global Reference) since JDK1原创 2014-09-11 14:19:47 · 817 阅读 · 0 评论 -
五、C++处理Java的数组
数组的处理分为一下两种方式1、基本类型2、指向Java类型的引用 对象类型(Object[] ) 的数组通用于两种类型的数组的函数 GetArrayLength(jarray array) 获取数组的长度一、处理基本类型数组1、 GetArrayElements(Array array,jboolean* isCopy)此函数可以把Java基本类型数组转换到C/C++中的数原创 2014-09-11 14:17:45 · 842 阅读 · 0 评论 -
四、(1)在C++中创建Java对象
本节讲的是在 C/C++本地代码中创建Java对象,JNI 中提供两个方法进行Java对象的操作,分别是 NewObject 和 Allocobject,先看下jni.h 头文件中对两个方法的定义jobject NewObject(jclass clazz, jmethodID methodID, ...) { va_list args; jobject res原创 2014-09-11 11:29:57 · 1443 阅读 · 0 评论 -
二、C++访问Java代码-知识点
第二讲主要是介绍JNI中提供的调用和修改以及其他一些操作java代码的方法,具体如下1、Java工具生成的C/C++函数声明中,可以看到两个参数:12345//对 com_fomagic_TestNative.h 中声明的方法定义JNIEXPORT voidJNICALL Java_com_fomagic_原创 2014-09-11 11:23:01 · 672 阅读 · 0 评论 -
三、C++操作java属性和方法
在第二讲中讲到了C++中操作java程序的方法以及操作步骤,下面就通过实例的方式来体会到底怎么通过JNI提供的方法来获取、操作 java属性、方法以及父类方法1、取得/设定Java属性值在原来java 类TestNative的基础上编写如下代码:123456789101112131415原创 2014-09-11 11:27:34 · 664 阅读 · 0 评论 -
四、(3)C++操作Java字符串实例
前面一篇讲了C++字符串三种方式,下面就给出这三种方式的例子通过C++代码将Java控制台输入的字符串倒序输出到Java控制台:Java代码都是一样的public class TestNative { public native void sayHello(); // C++本地代码实现 public String message=null; pu原创 2014-09-11 14:15:56 · 904 阅读 · 0 评论 -
四、(2)C++访问Java的String字符串对象
我以前是学Java的,对于C++只是明白很少的知识,所以看得越多,出现的问题也越多,我只有慢慢消化了第四讲的第二部分:在C/C++本地代码中访问Java的String字符串对象Java与C++中字符串的区别在Java中,使用的字符串String 对象时Unicode(UTF-16)码,即每个字符不论是中文还是英文还是符号,一个字符总是占两个字节Java通过JNI接口可以将Java的原创 2014-09-11 11:35:56 · 6300 阅读 · 0 评论 -
一、Java调用C/C++代码
一、什么是JNIJava Native Interface(JNI)是Java语言的本地编程接口是 Java 与操作系统本地代码互相调用的功能的接口 二、Java 调用C/C++步骤: 1、在Java类中声明native方法新建一个 Java 工程 TestNativeCode 包 com.fomagic 类 Testnative package c原创 2014-09-11 11:22:18 · 713 阅读 · 0 评论 -
六、(2)缓存jfieldID、jmethodID
缓存jfieldID/jmethodID取得jfieldID和jmethodID的时候通过该属性/方法名称加上签名来查询相应的ID,这种查询相对来说开销较大.我们可以将这些ID缓存起来,这样只需要查询一次,以后使用已经缓存的ID两种缓存方式1、在第一次使用的时候缓存 (Caching at the Point of Use)在native code 中使用static局部变量来保存原创 2014-09-11 14:20:46 · 2106 阅读 · 0 评论