美文网首页
JNIEnv结构体解析

JNIEnv结构体解析

作者: NoOneDev | 来源:发表于2016-12-20 17:19 被阅读2252次

JNI作为联系Java世界和Native世界的桥梁还面临过一个很麻烦的问题,那就是Java和Native之间的数据类型转换。

数据类型转换

基本数据类型转换

Java类型 别名 C++本地类型 字节(bit)
boolean jboolean unsigned char 8, unsigned
byte jbyte signed char 8
char jchar unsigned short 16, unsigned
short jshort short 16
int jint long 32
long jlong __int64 64
float jfloat float 32
double jdouble double 64

引用数据类型转换

引用数据类型转换

可以看到比较中要的是jobject,jclass

JNIEnv

JNIEnv.jpg

解释:JNIEnv 一般是是由虚拟机传入,而且与线程相关的变量,也就说线程A不能使用线程B的 JNIEnv。而作为一个结构体它里面定义了JNI系统操作方法
比如说:

  • FindClass
  • GetMethodID
  • GetFileID
JNIEnv操作jobject

object 一般由filed 和 method 两种成员构成,顾操作object其实就是操作filed和method,

jfiledID getFiledID(jclass clazz, const char *name, const char *sig);
jmethodID GetMethodID(jclass clazz, const char *name ,const char *sig);

操作这些成员

NativeType Call<type>Method(JNIEnv *env, jobject obj, jmethodID methodID,...) //type 对应Java函数的返回值类型。
NativeType Call<type>Filed(JNIEnv *env, jobject obj, jmethodID filedID,...) //type对应Filed变量类型
jString

因为string用的比较多,顾单独创建一个jstring 类型来表示Java 中的String

NewString(JNIEnv *env, const jchar * unicodeChars, jsize len) //得到一个jstring对象
NewStirngUTF() //根据Native的UTF-8 字符串得到一个jstring对象
GetStringChar() //将JavaString 对象转换成本地字符串得到Unicode字符串
GetStringUTFChar() //得到UTF-8 字符串
ReleaseStringUTFChars() //使用完后必须调用ReleaseStringUTFChars释放资源

相关文章

  • JNIEnv结构体解析

    JNI作为联系Java世界和Native世界的桥梁还面临过一个很麻烦的问题,那就是Java和Native之间的数据...

  • JNI总结

    java调用c/c++ 在C中:JNIEnv 结构体指针别名env二级指针 在C++中:JNIEnv 是一个结构体...

  • Android NDK开发:JNIEnv的原理

    目录 JNIEnv的原理 我们通过查看源码发现JNIEnv其实是结构体JNINativeInterface_的一级...

  • JNI资料

    Jni与java间的数据类型转换 1.JNIEnv是一个线程相关的结构体,该结构体代表了Java在本线程的执行环境...

  • JNI方法简介及实例

    这里讲到的JNI方法是指JNIEnv方法指针所指向的结构体(JNINativeInterface)一些函数。以下是...

  • JNI基础-JNI方法

    这里讲到的JNI方法是指JNIEnv方法指针所指向的结构体(JNINativeInterface)一些函数 方法操...

  • go day09 json

    通过结构体生成json struct_tag的使用 通过map生成json json解析到结构体 json解析到map

  • iOS 用OpenSSL解析X509证书信息

    在解析证书信息之前,需要将证书转换为X509结构体。以下代码中 cert 为X509证书结构体 一、解析证书序列号...

  • BMP结构体解析

    1.位图文件头 typedef struct tagBITMAPFILEHEADER { WORD ...

  • Swift(2)

    可选类型(?) 隐式解析可选类型(!) 结构体 类 协议 扩展 闭包

网友评论

      本文标题:JNIEnv结构体解析

      本文链接:https://www.haomeiwen.com/subject/fuqfvttx.html