首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

请问JNI返回数据的有关问题

2013-09-12 
请教JNI返回数据的问题我想设计一个recv函数JNIEXPORT jint JNICALL Java_com_cn_connect_SocketUnit_recv

请教JNI返回数据的问题
我想设计一个recv函数
JNIEXPORT jint JNICALL Java_com_cn_connect_SocketUnit_recv(
JNIEnv * env, jclass cls, jint sock, jbyteArray buf, jint len)
我想的是JAVA成传一个byte[]数组 和长度过来。 我把接收的数据写到这个buf里面。
我现在只知道可以
char* data = (char*)((*env)->GetByteArrayElements(env, buf, 0));
从jbyteArray转成char*取得数据。
然后使用ReleaseByteArrayElements释放。我现在的代码大概是这样的。


if (sock == -1) {
return -1;
}
char* data = (char*)((*env)->GetByteArrayElements(env, buf, 0));
if (data == 0) {
return -1;
}
int ret = recv(sock, data, len, 0);
if (ret == 0) {
break; //socket probably closed
} else if (ret < 0) {
break; //handle errors appropriately
}
(*env)->ReleaseByteArrayElements(env, buf, data, 0);


但是我觉得这样做是不对的。
[解决办法]
这个buf空间非要从java层传输过来吗?java层知道需要接收的长度?
不清楚你的具体情况,个人觉得可以直接在c++端创建buf接收,然后返回这个buf到java层。

热点排行