Как обновить bytearray в C через JNI, не возвращая bytearray - PullRequest
2 голосов
/ 13 марта 2011

Просто интересно, можно ли обновить ByteArray в C Code, который создан на Java, не возвращая его из C.

У меня есть ситуация, когда мне нужно обновить один байтовый массив несколько раз через JNI, а возврат байтового массива из C требует много вызовов JNI. Пожалуйста, дайте мне знать, если кто-нибудь знает, как это сделать?

Код должен быть примерно таким

Java-код

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

1 Ответ

3 голосов
/ 13 марта 2011

Обновление данных в массиве - это одно, а распределение - другое.Если вы знаете размер, и он не должен изменяться, выделите массив заранее, передайте его в JNI и используйте вызовы JNI SetByteArrayElement () и SetByteArrayRegion () для установки элементов.Например:

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

Однако, если вы хотите (пере) разместить массив в JNI, вы застряли с его возвратом.Там нет никаких параметров в Java.Один из способов обойти это - передать класс, где массив является переменной-членом, и обновить эту переменную-член, но это несколько усложняет часть JNI.

...