一.JNI字段描述符 "[I" ---  int[] "[[[D" --- double[][][] 如果以一个L开头的描述符,就是类描述符,它后紧跟着类的字符串,然后分号“:”结束.比如"Ljava/lang/String;"就是表示类型String: 二.JNI方法描述符 括号里放置参数,在括号后面放置返回类型,当一个函数不需要返回参数类型时,就使用”V”来表示.格式如下: (参数描述符)返回类型 比如 "()Ljava/lang/…
转载自http://fgsink.blog.163.com/blog/static/16716997020124310169911/ “([Ljava/lang/String;)V” 它是一种对函数返回值和参数的编码.这种编码叫做JNI字段描述符(JavaNative Interface FieldDescriptors).一个数组int[],就需要表示为这样"[I".如果多个数组double[][][]就需要表示为这样 "[[[D".也就是说每一个方括号开始,就表…
“([Ljava/lang/String;)V” 它是一种对函数返回值和参数的编码.这种编码叫做JNI字段描述符(JavaNative Interface FieldDescriptors).一个数组int[],就需要表示为这样"[I".如果多个数组double[][][]就需要表示为这样 "[[[D".也就是说每一个方括号开始,就表示一个数组维数.多个方框后面,就是数组 的类型. 如果以一个L开头的描述符,就是类描述符,它后紧跟着类的字符串,然后分号“:”结束.…
JNI字段描述符"([Ljava/lang/String;)V "([Ljava/lang/String;)V" 它是一种对函数返回值和参数的编码.这种编码叫做JNI字段描述符(JavaNative Interface FieldDescriptors).. 一个数组int[],就需要表示为这样"[I". 如果多个数组double[][][]就需要表示为这样 "[[[D".也就是说每一个方括号开始,就表示一个数组维数.多个方框后面,就是…
案例三:C代码访问Java对象的实例变量   获取对象的实例变量的步骤: 1. 通过GetObjectClass()方法获得此对象的类引用 2. 通过类引用的GetFieldID()方法获得实例变量的Field ID. 你需要提供 变量名,字段类型描述符 对于Java 类, 字段描述符格式为 "L<类全称>;" 类全称中,点"."用 "/"代替.例如,String 的描述符为"Ljava/lang/String;"…
本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 在这里只讨论调用JNI方法可能会出现的异常, 在本地方法里捕捉并抛出异常 下面的例子说明怎样声明一个可能抛出异常的本地方法: class CatchThrow { //声明一个本地方法,并可能会抛出不合法参数异常 private native void doit() throws IllegalArgumentException; private vo…
本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 JNI里的多线程 在本地方法里写有关多线程的代码时,需要知道下面几个约束: 一个JNIEnv指针只在与它关联的线程里有效,也就是说,在线程间传递JNIEnv指针和在多线程环境里通过缓存来使用它是不允许和不安全的.JVM在同一个线程里多次调用同一个本地方法时传递的是同一个JNIEnv指针,但在不同的线程里调用同一个本地方法时传递的是不同的JNIEnv指针…
本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 JNI支持将类实例和数组类型(如jobject,jclass,jstring,jarray)作为不透明的引用.本地代码不直接检查不透明指针的内容,而是通过使用JNI方法来得到一个指向数据结构的指针的不透明引用.也就是说JNI操作的内容都是引用,因此我们只需要知道在JNI中有哪些引用.JNI支持三种不透明的引用:本地引用.全局引用,弱全局引用. 本地引用…
本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 Java编程里会使用到两种类型:基本类型(如int,float等)和引用类型(如class,instance,arrays),JNI编程里对这两种的类型的处理方法也是不一样的. JNI定义了与Java的基本类型和引用类型相对应的C/C++类型: Java类型 本地类型(JNI中使用) boolean jboolean int jint float jf…
JNI(Java Native Interface,JAVA原生接口) 使用JNI可以使Java代码和其他语言写的代码(如C/C++代码)进行交互. 问:为什么要进行交互? 首先,Java语言提供的类库无法满足要求,且在数学运算,实时渲染的游戏上,音视频处理等方面上与C/C++相比效率稍低. 然后,Java语言无法直接操作硬件,C/C++代码不仅能操作硬件而且还能发挥硬件最佳性能. 接着,使用Java调用本地的C/C++代码所写的库,省去了重复开发的麻烦,并且可以利用很多开源的库提高程序效率.…