2011-03-13 3 views
2

Je me demandais s'il est possible de mettre à jour un ByteArray dans le code C, qui est créé en Java, sans le renvoyer de C.Comment mettre à jour bytearray en C par JNI sans retourner bytearray

Je situation où J'ai besoin de mettre à jour un seul bytearray plusieurs fois par JNI et retourner bytearray de C prend beaucoup d'appels JNI. S'il vous plaît laissez-moi savoir si quelqu'un sait comment faire cela?

code

devrait être quelque chose comme ça

du code Java

byte[] storeData; 
updateFromNative(storeData); //update the byteArray in native code; 
//use the storeData in Java with updated value. 

Répondre

3

données Mise à jour du tableau est une chose, REPARTITION est une autre. Si vous connaissez la taille et qu'elle n'est pas censée changer, allouez le tableau au préalable, passez-le dans JNI et utilisez les appels JNI SetByteArrayElement() et SetByteArrayRegion() pour définir les éléments. Comme ceci:

byte[] storeData = new byte[Size]; 
updateFromNative(storeData); 

Cependant, si vous voulez (re) Alocate le tableau dans JNI, vous êtes coincé avec le retourner. Il n'y a pas de paramètres out dans Java. Un moyen de contourner cela est de passer une classe où le tableau est une variable membre, et de mettre à jour cette variable membre, mais cela complique quelque peu la partie JNI.