💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
原生函数声明中的参数类型与原生编程语言中的类型是相关联的。JNI定义了一系列的与Java语言中的数据类型相关联的C和C++类型。 在Java语言中有两种类型:想int,float,char这样的基础数据类型以及像类,实例对象,数组这样的引用类型(注意,Java是基于对象的语言,其中的Class,ClassLoader等本身也还是对象)。在Java语言中,字符串都是java.lang.String 类的对象。 JNI使用不同的方式处理基础数据类型和引用类型。基础数据类型的映射是直接的,例如,Java语言中的int直接映射到C/C++语言中的jint(以32位有符号整形在jni.h中定义).Java语言中的float直接映射到C/C++语言中的jfloat(以32位有符号浮点数的形式在jni.h中定义),12.1.1节包含了所有定义在JNI中的基础数据类型。 JNI以一种不透明的引用方式向原生代码传递对象,不透明的引用指的是指向Java虚拟机中内部数据对象的C语言指针。原生代码必须通过JNIEnv中定义的函数处理这些内部数据对象。例如对应java.lang.String的JNI对象是jstring.jstring引用的真实的值是与原生代码无关的。原生代码通过GetStringUTFChars来访问一个Java字符串的内容。 所有的JNI引用都是jobject类型。为了提高类型安全性以及保证使用的便利性,JNI定义了一些列引用类型,这些引用类型在概念上都是Jobject的子类型。这些子类型与Java语言中最常用的类型相关联。例如,jstring对应String, jobjectArray对应一个对象数组,12.1.2节中包含了JNI引用类型以及与其所有子类型之间继承关系的完整列表。