在JNI中返回二維byte
數組,你需要在Java中準備一個相應的二維數組來接收這個返回值。在JNI層面,你可以創建一個二維的byte
數組,并使用GetByteArrayRegion
和SetByteArrayRegion
來操作它。
以下是一個簡單的例子:
public class JniTest {static {System.loadLibrary("jni_test");}public native byte[][] get2DByteArray();public static void main(String[] args) {JniTest test = new JniTest();byte[][] result = test.get2DByteArray();// 處理返回的二維數組for (byte[] innerArray : result) {for (byte value : innerArray) {System.out.print(value + " ");}System.out.println();}}
}
JNI C/C++端代碼:
#include <jni.h>JNIEXPORT jobjectArray JNICALL
Java_JniTest_get2DByteArray(JNIEnv *env, jobject obj) {// 創建一個2x2的二維byte數組jclass byteArrayClass = (*env)->FindClass(env, "[B");jobjectArray result = (*env)->NewObjectArray(env, 2, byteArrayClass, NULL);for (int i = 0; i < 2; ++i) {jbyteArray innerArray = (*env)->NewByteArray(env, 2);jbyte bytes[2] = {(jbyte)(i * 2), (jbyte)(i * 2 + 1)};(*env)->SetByteArrayRegion(env, innerArray, 0, 2, bytes);(*env)->SetObjectArrayElement(env, result, i, innerArray);(*env)->DeleteLocalRef(env, innerArray);}return result;
}
確保你的JNI函數名稱與Java中聲明的本地方法簽名相匹配。例如,Java_JniTest_get2DByteArray
與public native byte[][] get2DByteArray();
。
這個例子創建了一個2x2的二維byte
數組,并在JNI層面初始化了它。然后將其返回給Java層,在Java中打印出數組中的值。