Android JNI 学习(三):JNI 数据类型和数据结构

本文我们来讨论一下JNI如何将Java类型映射到本机C类型。

一、基本数据类型

如下图表整理了Java基本类型和native对应的关系:

Java类型 Native类型 描述
boolean jboolean unsigned 8 bits
byte jbyte signed 8 bits
char jchar unsigned 16 bits
short jshort signed 16 bits
int jint signed 32 bits
long jlong signed 64 bits
float jfloat 32 bits
double jdouble 64 bits
void void N/A

二、引用类型

JNI 包含许多与不同类型的Java对象相对应的引用类型。JNI引用类型按层次结构组织,如图所示:

在C中,所有其他JNI引用类型都定义为与jobject相同。例如:

typedef jobject jclass; 

在C ++中,JNI引入了一组虚拟类来强制执行子类型关系。例如:

class _jobject {};
class _jclass : public _jobject {};
...
typedef _jobject *jobject;
typedef _jclass *jclass; 

三、字段和方法ID

方法和字段ID是常规C指针类型:

struct _jfieldID;              /* opaque structure */
typedef struct _jfieldID *jfieldID;   /* field IDs */ 

struct _jmethodID;              /* opaque structure */
typedef struct _jmethodID *jmethodID; /* method IDs */ 

四、类型签名

JNI 使用Java VM的类型签名表示。下图显示了这些类型的签名:

类型签名 Java类型
Z boolean
B byte
C char
S short
I int
J long
F float
D double
L fully-qualified-class ; fully-qualified-class
[ type type[]
( arg-types ) ret-type method type

举个例子,Java方法:

long f (int n, String s, int[] arr); 

对应的方法类型签名为:

(ILjava/lang/String;[I)J 

原文地址:https://www.cnblogs.com/renhui/p/9940548.html

时间: 2024-10-08 00:34:59

Android JNI 学习(三):JNI 数据类型和数据结构的相关文章

Python学习笔记_Day2_数据类型及数据结构(列表和元组)

1. 数据类型 2. 数据结构 通过某种方式(例如对元素进行编号)组织在一起的数据元素的集合.最基本的数据结构是序列(Sequence).序列中的每个元素被分配一个序列号--即元素的位置,被称为索引.索引从0开始. Python中6中内建序列: list列表 (可以修改) tuple元组 (不可以修改,指向不可改变) unicode字符串 buffer对象 xrange对象 通用序列操作:indexing索引, slicing分片, adding加, multiplying乘,成员资格 索引:从

Python 学习三 基本数据类型

基本数据类型数字 int ,所有的功能,都放在int里   (类型通过ctrl+左键查看具体方法)    a1 = 123    a1 = 456 - 1212131415 Python 2 用long长整型表示 Python 3 没有长整型,都用int 字符串 str    s1 = "asdf"    s2 = "asdffas"列表 list    ...元组 tuple    ...字典 dict    ...布尔值 bool    ... 将字符串转化为数

Android开发学习三:adb启动失败

解决问题: 1.其他软件给占用了5037端口: 2.打开cmd,输入命令:netstat -aon|findstr "5037",查看是那个软件的占着5037: 3.之后在任务管理器中结束那个进程;(PID,设置任务管理器查看选择列) 4.打开cmd,输入:adb kill-server, adb start-server; 5.restart eclipse;

android学习笔记----JNI中的c控制java

面向对象的底层实现 java作为面向对象高级语言,可对现实世界进行建模.和面向过程不同的是面向对象软件的编写不是流程的堆积,而是对业务逻辑的多视角分解和分类.其过程大致为:      1).将知识分解成不同粒度的小概念.      2).对概念进行分类,形成类.模块.系统      3).用计算机语言将其实现为对象(包含操作和数据) 然而,大多程序员编写代码时很少思考面向对象的体系是如何实现的.因为它属于底层,并不必要.但是,学习过Java反射技术并有所思考的人会意识到,面向对象的种种语法本身也

Android中关于JNI 的学习(二)对于JNI方法名,数据类型和方法签名的一些认识

处理特征数据 及 代码 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26240241 输入文件:  1. 归一化后的特征文件, 第1列是标签, 其余列是特征; 2. 特征最大值向量文件: 前3列是标准格式, 其余列是最大值; 输出文件: 1. 符合SVM训练数据的特征格式; 2. Mat存储的标准XML文件; 代码: /* 处理特征数据程序 By C.L.Wang 数据格式: 特征数据: 第1列是标签, 其余列是特征; 最大

Android JNI学习笔记(四)-数据类型映射以及native调用java

1. 前言 前几篇学习了jni开发的基本流程.动态注册native函数以及相关编译文件的编写,咱们也算是知道了jni开发,但是还不够,今天咱们来学习下,java和jni的数据类型映射(说白了就是对应关系),以及如何在jni层调用java层的一些东西.偷偷告诉你们,这些全在jni.h文件里. 2. 数据类型映射 首先是我们的基本数据类型,其关系如下表描述这样. 上面关系的相关代码在jni.h的44-51行,如下 typedef unsigned char jboolean; /* unsigned

Android学习笔记--JNI的使用方法

1.JNI是什么 JNI是Java Native Interface的缩写,它提供若干的API实现Java与其他语言之间的通信.而Android Framework由基于Java语言的的Java层与基于C/C++语言的C/C++层组成,每个层中的功能模块都是以有相应的语言编写,并且两层中的大部分模块有着千丝万缕的联系.而在两层之间充当连接桥梁这一角色的就是JNI,它允许Java代码和C/C++编写的应用程序与库之间进行交互:通常在以下几种情况下使用JNI 1.注重处理速度,C/C++的处理速度要

【Android】Eclipse自己主动编译NDK/JNI的三种方法

[Android]Eclipse自己主动编译NDK/JNI的三种方法 SkySeraph Sep. 18th  2014 Email:[email protected] 一.Eclipse关联cygwin 1. project->右击选择Properties->选择Builders,在Builders中选择New创建一个Program 2. 參数配置 二.Eclipse关联ndk-build(自建Builder方法)  1. Project->Properties->Builder

【Android】Eclipse自动编译NDK/JNI的三种方法

[Android]Eclipse自动编译NDK/JNI的三种方法 SkySeraph Sep. 18th  2014 Email:[email protected] 一.Eclipse关联cygwin 1. 工程->右击选择Properties->选择Builders,在Builders中选择New创建一个Program 2. 参数配置 二.Eclipse关联ndk-build(自建Builder方法)  1. Project->Properties->Builders->N