Android FFmpeg开发(二)JNI数据类型

  • 背景

JNI是Java Native Interface的缩写,通过使用 Java本地接口书写程序,可以确保代码在不同的平台上方便移植,在 JNI 开发中,我们知道,Java 的数据类型并不是直接在 JNI 里使用的,JNI有着的数据类型,例如 int 就是使用 jint 来表示。
那么,就如我们来认识一下这些数据类型吧。

 

  • JNI基本数据类型

 

JNI数据类型
Java JNI C/C++ 数据类型描述
boolean jboolean unsigned char  C/C++无符号8为整数 

 byte

 jbyte

 signed char 

C/C++有符号8位整数 

 short

 jshort 

 signed short

C/C++有符号16位整数

 int

 jint 

 signed int 

C/C++有符号32位整数

long

 jlong

 signed long 

C/C++有符号64位整数 

 float

 jfloat 

 float 

C/C++32位浮点数

 double

 jdouble 

 double 

C/C++64位浮点数 

 char

 jchar 

 unsigned short 

C/C++无符号16位整数

 

 

  • 引用数据类型

 

引用数据类型

Java的类类型

 JNI的引用类型

 类型描述

java.lang.Object

 jobject

 可以表示任何Java的对象,或者没有

JNI对应类型的Java

对象(实例方法的强制参数

java.lang.String

 jstring

 Java的String字符串类型的对象

java.lang.Class

 jclass

 Java的Class类型对象(静态方法的强制参数)

Object[]

 jobjectArray

 Java任何对象的数组表示形式

boolean[]

 jbooleanArray

 Java基本类型boolean的数组表示形式

 byte[]

 jbyteArray

 Java基本类型byte的数组表示形式

char[]

 jcharArray

 Java基本类型char的数组表示形式

short[]

 jshortArray

 Java基本类型short的数组表示形式

 int[]

 jintArray

 Java基本类型int的数组表示形式

long[]

 jlongArray

 Java基本类型long的数组表示形式

float[]

 jfloatArray

 Java基本类型float的数组表示形式

double[]

 jdoubleArray

 Java基本类型double的数组表示形式

 java.lang.Throwable

 jthrowable

 Java的Throwable类型,表示异常的所有类型和子类

 void

 void

N/A

 

四、数据类型描述符

  1、什么是数据类型描述符

    在JVM虚拟机中,存储数据类型的名称时,是使用指定的描述符来存储,而不是我们习惯的 int,float 等。

   2、对照表

 

对照表

Java类型

 类型描述符

 int

 I

 long

 J

 byte

 B

short

 S

char

 C

float

 F

 double

 D

 boolean

 Z

void

V

 其他引用类型

 L+类全名+;

数组

[

方法

(参数)返回值

 

 

  •  例如我们要表示一个 String 类

    Java 类型:java.lang.String
    JNI 描述符:Ljava/lang/String;
    即一个 Java 类对应的描述符,就是 L 加上类的全名,其中 . 要换成 / ,最后 不要忘掉末尾的分号。

  •   假如我们想要表示数组的话

    Java 类型:String[]
    JNI 描述符:[Ljava/lang/String;
    Java 类型:int[][]
    JNI 描述符:[[I
    数组就是简单的在类型描述符前加 [ 即可,二维数组就是两个 [ ,以此类推。

  • 方法

    Java 方法:long f (int n, String s, int[] arr);
    JNI 描述符:(ILjava/lang/String;[I)J
    Java 方法:void f ();
    JNI 描述符:()V
    括号内是每个参数的类型符,括号外就是返回值的类型符。
 

参考文章:JNI数据类型和类型描述符

 

你可能感兴趣的:(Android,ffmpeg开发)