3. 将c中获取的一个char*的buffer传递给java?
来源:互联网 发布:学党史知国情心得体会 编辑:程序博客网 时间:2024/04/29 05:17
3. 将c中获取的一个char*的buffer传递给java?
这个char*如果是一般的字符串的话,作为string传回去就可以了。如果是含有’\0’的buffer,最好作为bytearray传出,因为可以制定copy的length,如果copy到string,可能到’\0’就截断了。
有两种方式传递得到的数据:
一种是在jni中直接new一个byte数组,然后调用函数(*env)->SetByteArrayRegion(env,bytearray, 0, len, buffer);将buffer的值copy到bytearray中,函数直接returnbytearray就可以了。
一种是return错误号,数据作为参数传出,但是java的基本数据类型是传值,对象是传递的引用,所以将这个需要传出的byte数组用某个类包一下,如下:
class RetObj { public byte[] bytearray; } 这个对象作为函数的参数retobj传出,通过如下函数将retobj中的byte数组赋值便于传出。代码如下:
jclass cls;
jfieldID fid;
jbyteArray bytearray;
bytearray = (*env)->NewByteArray(env,len);
(*env)->SetByteArrayRegion(env, bytearray, 0, len, buffer);
cls = (*env)->GetObjectClass(env, retobj);
fid = (*env)->GetFieldID(env, cls, "retbytes","[B"]);
(*env)->SetObjectField(env, retobj, fid, bytearray);
4. 不知道占用多少空间的buffer,如何传递出去呢?
在jni的c文件中new出空间,传递出去。java的数据不初始化,指向传递出去的空间即可。
对JAVA传入数据的处理
1. 如果传入的是bytearray的话,作如下处理得到buffer:
char *tmpdata = (char*)(*env)->GetByteArrayElements(env,bytearray, NULL);
(*env)->ReleaseByteArrayElements(env,bytearray, tmpdata, 0);
- 3. 将c中获取的一个char*的buffer传递给java?
- jni数组使用及将C的char数组传递给Java
- 将char[][] 赋值给char**的结果
- 将一个整数写到两个字节的buffer中
- JAVA中的char与C语言中char的区别
- 在子线程中如何使用Handler将一个包含对象的集合传递给主线程
- C语言对char*的封装,形成buffer
- sqlHelper封装类,用于对数据库的操作,此类将查询操作中返回的结果集传递给了一个数组,直接将资源关闭
- 将ViewBag的值传递给js
- Java中 Buffer的作用
- MFC将某一Cwnd类获取的消息传递给别的窗口响应
- 详解java中给方法传递参数的两种方式:按值传递,引用传递
- c 中char * 和 char []的区别
- C/C++ 将 字符串 赋给char[]
- C函数传递一个table给lua代码中使用。
- 如何将vector 和 string 传递给 类C的API
- 如何将c语言的变量传递给shell脚本使用
- Flex 将控件的值传递给函数的3中方式
- 改变MKAnnotationView的大小,使之随MKMapView的缩放而缩放
- 2. 如何将java传入的String参数转换为c的char*,然后使用?
- hdu2832
- CMMB在Android平台上的实现步骤简介
- catalina.home和catalina.base 的区别
- 3. 将c中获取的一个char*的buffer传递给java?
- Struts自定义Converter
- Java 继承学习资料
- MBBMS CA方案
- 飞鸽传书2013年开发计划
- Android软件包静默安装小应用 - 附源码
- 第一个android工程
- 在VM虚拟机下部署Oracle安装环境
- hdu1394求最小逆序数