JNIEnv结构体解析

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

数据类型转换

基本数据类型转换

Java类型别名C++本地类型字节(bit)
booleanjbooleanunsigned char8, unsigned
bytejbytesigned char8
charjcharunsigned short16, unsigned
shortjshortshort16
intjintlong32
longjlong__int6464
floatjfloatfloat32
doublejdoubledouble64

引用数据类型转换

引用数据类型转换

可以看到比较中要的是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释放资源



文章转自:https://www.jianshu.com/p/453b0463a84c,好文要顶,感谢博主分享!
 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值