Android JNI 数据类型

Java层和Native层都有自己的数据类型,在JNI中,这些数据类型又可以分为基本数据类型和引用数据类型,其中,基本数据类型是可以直接相互转换的,而引用数据类型则需要进行一定的装换才可以。为了方便对两个世界的基本数据类型进行相互装换,JNI为我们提供了一系列的方法来帮助我们完成这些工作。

  1. JNI数据类型
  2. 1 基本数据类型
Java类型 	JNI类型 	类型签名
boolean 	jboolean 	Z
byte 	    jbyte 	    B
char 	    jchar 	    C
short 	    jshort 	    S
int 	    jint 	    I
long 	    jlong 	    J
float 	    jfloat 	    F
double 	    jdouble 	D
void 	    void 	    V

1.2 引用类型

Java类型 	JNI类型 	        类型签名
所有对象 	jobject 	    L+ classname + ;
Class 	    jclass 	        Ljava/lang/Class;
String 	    jstring 	    Ljava/lang/String;
Object[] 	jobjectArray 	[L + classname + ;
boolean[] 	jbooleanArray 	[Z
byte[] 	    jbyteArray 	    [B
char[] 	    jcharArray 	    [C
short[] 	jshortArray 	[S
int[] 	    jintArray 	    [I
long[] 	    jlongArray 	    [J
float[] 	jfloatArray 	[F
double[] 	jdoubleArray 	[D
Throwable 	jthrowable 	    Ljava/lang/Throwable;

1.3 引用类型的继承关系

jobject
jclass (java.lang.Class objects)
jstring (java.lang.String objects)
jarray (arrays)
jobjectArray (object arrays)
jbooleanArray (boolean arrays)
jbyteArray (byte arrays)
jcharArray (char arrays)
jshortArray (short arrays)
jintArray (int arrays)
jlongArray (long arrays)
jfloatArray (float arrays)
jdoubleArray (double arrays)
jthrowable (java.lang.Throwable objects)

  1. 基本数据类型

JNI 中的基本类型和 Java 中的基本类型是直接相互转换的,实际上,JNI中的这些Java层的基本类型定义就只是对 C/C++ 中的基本类型用 typedef 重新定义了一个新的名字而已。

/* Primitive types that match up with Java equivalents. */
typedef uint8_t  jboolean; /* unsigned 8 bits */
typedef int8_t   jbyte;    /* signed 8 bits */
typedef uint16_t jchar;    /* unsigned 16 bits */
typedef int16_t  jshort;   /* signed 16 bits */
typedef int32_t  jint;     /* signed 32 bits */
typedef int64_t  jlong;    /* signed 64 bits */
typedef float    jfloat;   /* 32-bit IEEE 754 */
typedef double   jdouble;  /* 64-bit IEEE 754 */
  1. 引用数据类型

JNI 把 Java 中所有对象当作一个 C 指针传递到本地方法中,这个指针指向 JVM 中的内部数据结构,而内部的数据结构在内存中的存储方式是不可见得。只能从 JNIEnv 指针指向的函数表中选择合适的 JNI 函数来操作 JVM 中的数据结构。JNI为我们提供了一系列的JNI函数来进行引用数据类型的操作和处理。如字符串类型,可以通过JNI函数NewString来在C,C++中创建一个Java字符串。JNI中关于这些引用数据类型定义的源码如下。

#ifdef __cplusplus
/*
 * Reference types, in C++
 */
class _jobject {
   
   };
class _jclass : public _jobject {
   
   };
class _jstring : public _jobject {
   
   };
class _jarray : public _jobject {
   
   };
class _jobjectArray : public _jarray {
   
   };
class _jbooleanArray : public _jarray {
   
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安卓兼职framework应用工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值