Android C++ NDK如何使用数组传递数据?

 时间:2026-02-14 05:08:36

1、一、在JNI中创建指定类型的数组

在Native中使用 NewTypeArray函数可以创建数组实例。其中的Type可以是:Boolean、Char、Short、Int、Long、Float、Double,Object。(如图:创建数组的函数.png)。

Android C++ NDK如何使用数组传递数据?

2、使用NewByteArray创建数组

今天我们选择创建NewByteArray数组(如图:创建指定长度的Byte数组.png)。 与上一篇文章中我们讲的创建NewStringUTF函数一样,在内存溢出的情况下,那么headersBytesArr就会是NULL以通知Native代码抛出异常。

jbyteArray headersBytesArr = NULL;

/*** 创建长度为10的byte数组*/

headersBytesArr = _env ->NewByteArray(10);

if(headersBytesArr != NULL){

LOGE("===赞,创建byte数组成功了===");

else{

LOGE("===很遗憾,创建byte数组失败了,");

}

Android C++ NDK如何使用数组传递数据?

3、二、如何访问数组元素

开发中访问数组元素可以有两种方式:一种是将数组复制给C数组,另一种是提供直接指向数组元素的指针。

(1)把Java数组区复制到C数组中

Native代码可以和使用普通的C数组一样的方式去使用和修改数组元素。如果是复制到C数组中使用GetByteArrayRegion方法(如图:从Java数组区复制到C数组.png);

Android C++ NDK如何使用数组传递数据?

4、如果是Native代码想把修改后的数组提交给Java层的数组,就需要使用SetByteArrayRegion方法(如图:从Native数组区提交到Java数组.png);

Android C++ NDK如何使用数组传递数据?

5、(2)对直接指针进行操作

如果是对直接指针进行操作,Native代码需要使用GetByteArrayElements函数得到指向数组的直接指针。其中第二个参数是可选参数isCopy,可以让我们确定返回的数组地址是指向副本还是指向堆中的固定对象。(如图: 得到指向数组的直接指针.png)。

Android C++ NDK如何使用数组传递数据?

6、在Native中使用完指针资源以后,一定要记得释放资源,不然很容易出现内存泄漏。释放指针使用ReleaseByteArrayElements(_javaArray, directHeader, 0)方法(如图:释放指向Java层数组的指针.png)。

Android C++ NDK如何使用数组传递数据?

  • weblogic节点内存溢出检测及处理方式
  • eclipse运行SSH框架项目
  • Centos7自建yum源并同步阿里源方法
  • 报表插件FineReport中如何使用Tomcat服务器部署
  • css按钮大全,多配色,layui易使用
  • 热门搜索
    华山旅游路线 泉州旅游团 上海外滩旅游攻略 全国旅游景点地图 江苏盐城旅游景点 内蒙古旅游注意事项 山东半岛旅游 珠海旅游攻略自由行 湘西旅游网 赵县旅游景点大全