gpt4 book ai didi

java-native-interface - java - 如何将char缓冲区中的数据复制到jbyteArray并在Java native 接口(interface)(JNI)中将其从C返回到java?

转载 作者:行者123 更新时间:2023-12-04 08:37:56 26 4
gpt4 key购买 nike

我有 unsigned char 缓冲区,其中有数据,我需要将其复制到 jbyteArray 以便我可以以字节数组格式返回它。这是我的一段代码
C代码:

JNIEXPORT jbyteArray JNICALL Java_hello1_recieve(JNIEnv *env, jobject object) 
{


ssize_t bytes_read;
/* receive the message */
bytes_read = mq_receive(mq,buff, MAX_SIZE, NULL);
jbyteArray b[bytes_read];
CHECK(bytes_read >= 0);
buff[bytes_read] = '\0';

int i=0;
while(buff[i]!='\0')
{
b[i]=buff[i];
printf("%c\n",b[i]);
i++;
}


/* cleanup */

CHECK((mqd_t)-1 != mq_close(mq));
CHECK((mqd_t)-1 != mq_unlink(QUEUE_NAME));
return b;

}

这里 CHECK(x) 是:
do{ 
if (!(x))
{
fprintf(stderr, "%s:%d: ", __func__, __LINE__);
perror(#x);
exit(-1);
}
} while (0)

java端的代码是:
public class hello1 {
public native void sayHello() ;
public native byte[] recieve() ;
public static void main (String args[]) {


hello1 h = new hello1 () ;
h.sayHello () ;
System.out.println("connection open");
byte[] rdata= new byte[3];
rdata=h.recieve();
int i=0;
while( rdata[i] != '\0')
{
System.out.println( rdata [i]);
i++;
}
System.out.println("connection closed");
}
static {
System.loadLibrary ( "hello1" ) ;
}
}

但是当我尝试打印 rdata 时出现 java.lang.NullPointerException。哪里有问题?
谢谢

更新
这有效: -
 jbyteArray b=(*env)->NewByteArray(env, bytes_read);
(*env)->SetByteArrayRegion(env, b, 0, bytes_read, (jbyte *)buff);

最佳答案

 jbyteArray b=(*env)->NewByteArray(env, bytes_read);
(*env)->SetByteArrayRegion(env, b, 0, bytes_read, (jbyte *)buff);
// after cleanup
return b;

关于java-native-interface - java - 如何将char缓冲区中的数据复制到jbyteArray并在Java native 接口(interface)(JNI)中将其从C返回到java?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40882121/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com