Ich brauche Hilfe beim Übergeben von Binärdaten in Java. Ich versuche, jbytearray zu verwenden, aber wenn die Daten in Java gelangen, scheint es beschädigt zu sein. Kann mir jemand helfen?JNI Stream binäre Daten von C++ nach Java
Hier ist ein Ausschnitt aus einem Beispielcode. Zunächst wird die native C++ Seite:
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);
und dann die Java-Callback-Methode:
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!");
}
ich die folgende Ausgabe erhalten, wenn der Rückruf aufgerufen wird:
library loaded!
Audio supplied to Java [-2019659176] bytes
Audio passed back accordingly!
Ich glaube, ich mein Problem gefunden ... Dieser Aufruf: env-> CallVoidMethod (obj, aMethodId & rawAudioCopy); wurde an Ref statt an Wert übergeben. Wechseln zu: env-> CallVoidMethod (obj, aMethodId, rawAudioCopy); scheint das Problem anzugehen. Gibt es ein gutes Referenzhandbuch und Beispiele, um mich am Laufen zu halten? Ich bin wirklich verletzt um Hilfe hier. – Cliff