如何通过JNI更新C中的bytearray而不返回bytearray

时间:2011-03-13 16:07:09

标签: java c java-native-interface bytearray

只是想知道是否可以更新C代码中的ByteArray,这是用Java创建的,而不是从C返回。

我有这样的情况,我需要通过JNI多次更新单个bytearray并从C返回bytearray需要大量的JNI调用。如果有人知道怎么做,请告诉我?

代码应该是这样的

Java代码

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

1 个答案:

答案 0 :(得分:3)

更新数组中的数据是一回事,分配是另一回事。如果您知道大小,并且它不应该更改,请事先分配数组,将其传递给JNI,并使用JNI调用SetByteArrayElement()和SetByteArrayRegion()来设置元素。像这样:

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

但是,如果你想(重新)在JNI中重新定位数组,那么你将无法返回它。 Java中没有out参数。绕过它的一种方法是传递一个类,其中数组是一个成员变量,并更新该成员变量,但这有点使JNI部分复杂化。