jni c 传递对象到java_JNI将二进制数据从C传递到Java
我需要幫助將二進(jìn)制數(shù)據(jù)傳遞給
Java.我正在嘗試使用jbytearray但是當(dāng)數(shù)據(jù)進(jìn)入Java時(shí)它看起來(lái)很糟糕.有人可以幫我一把嗎?
這是一些示例代碼的片段.首先是原生C面:
printf("Building audio array copy\n");
jbyteArray rawAudioCopy = env->NewByteArray(10);
jbyte toCopy[10];
printf("Filling audio array copy\n");
char theBytes[10] = {0,1,2,3,4,5,6,7,8,9};
for (int i = 0; i < sizeof(theBytes); i++) {
toCopy[i] = theBytes[i];
}
env->SetByteArrayRegion(rawAudioCopy,0,10,toCopy);
printf("Finding object callback\n");
jmethodID aMethodId = env->GetMethodID(env->GetObjectClass(obj),"handleAudio","([B)V");
if(0==aMethodId) throw MyRuntimeException("Method not found error",99);
printf("Invoking the callback\n");
env->CallVoidMethod(obj,aMethodId, &rawAudioCopy);
然后是Java回調(diào)方法:
public void handleAudio(byte[] audio){
System.out.println("Audio supplied to Java [" + audio.length + "] bytes");
byte[] expectedAudio = {0,1,2,3,4,5,6,7,8,9};
for (int i = 0; i < audio.length; i++) {
if(audio[i]!= expectedAudio[i])
System.err.println("Expected byte " + expectedAudio[i]
+ " at byte " + i + " but got byte " + audio[i]);
else System.out.print('.');
}
System.out.println("Audio passed back accordingly!");
}
調(diào)用回調(diào)時(shí),我得到以下輸出:
library loaded!
Audio supplied to Java [-2019659176] bytes
Audio passed back accordingly!
總結(jié)
以上是生活随笔為你收集整理的jni c 传递对象到java_JNI将二进制数据从C传递到Java的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python做网络的仿真_用python
- 下一篇: git配置用户信息_git系列教程(4)