Android NDK开发篇(五):Java与原生代码通信(数据操作)

本文详细介绍了在Android NDK开发中,如何进行Java与原生代码的数据操作,包括字符串处理、数组操作、NIO以及访问Java域和方法。通过JNI接口,可以实现Java引用类型在NDK中的使用,但需要注意内存管理和效率问题,如使用Release函数释放资源,以及通过Get和Set系列函数进行数据交互。
摘要由CSDN通过智能技术生成

  虽然说使用NDK可以提高Android程序的执行效率,但是调用起来还是稍微有点麻烦。NDK可以直接使用Java的原生数据类型,而引用类型,因为Java的引用类型的实现在NDK被屏蔽了,所以在NDK使用Java的引用类型则要做相应的处理。


  一、对引用数据类型的操作

  虽然Java的引用类型的实现在NDK被屏蔽了,JNI还是提供了一组API,通过JNIEnv接口指针提供原生方法修改和使用Java的引用类型。

    1、字符串操作

    JNI把Java的字符串当作引用来处理,在NDK中使用Java的字符串,需要相关的API进行转换。JNI支持Unicode编码和UTF-8编码的字符串,有两组函数通过JNIEnv接口指针处理这些字符串编码:

jstring javaString;
javaString = (*env)->NewStringUTF(env, "Hello World");

    该方法生成一个的UTF-8编码字符串。


    2、Java字符串转C字符串

    要在原生方法中使用Java字符串,需要将Java字符串转成C字符串。可以调用GetStringChars函数:

const jbyte *str;
jboolean isCopy;

str = (*env)->GetStringUTFChars(env, javaString, &isCopy);

    第三个参数isCopy,可以用作判断该函数返回的字符串是否是Java字符串的副本,还是直接指向Java字符串的内存。


    3、释放字符串

    通过JNIEnv调用的GetStringChars和GetStringUTFChars函数获得的C字符串在使用完后要正确释放,否则就会造成内存泄漏。可通过ReleaseStringUTFChars函数(用于释放Unicode)和ReleaseStringUTFChars函数(用于释放UTF-8)释放字符串。

(*env)->ReleaseStringUTFChars(env, javaString, str);
(*env)->ReleaseStringChars(env, javaString, str);


  二、数组操作

  JNI把Java的数组也是当作引用类型处理的,不过JNI还

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值