在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中打印出数组中的值。