Return 使用 JNI 从 C++ 到 Java 列表<unsigned char*>

Return list<unsigned char*> from C++ to Java using JNI

我有以下 JNI 方法,

JNIEXPORT jobject JNICALL Java_projlib_DeserializeBuffer
(JNIEnv *env, jobject obj, jbyteArray inBufferData)

我创建了一个 unsigned char* 的列表,并使用从我的 C++ 代码 inBufferData 中提取的一些数据填充它

list<unsigned char*> returnBuffer

我想 return returnBuffer 到我的 Java 代码,其中它将是一个字节数组列表,List<byte[]>

请告诉我如何通过 JNI 通过 jobject 传递 unsigned char* 列表,然后在 Java 中获取它以进行进一步处理。

您将无法直接执行此操作。您必须在 C++ 中实例化所需 Java 列表实现的实例(因为 List 是一个接口),将其放入 jobject 中,然后将 jbytearray 项添加到它来自您的列表,然后 return 列表。

示例

由于我没有可用的 JNI 环境,此片段仅供参考(当您开始使用时请随意编辑),但您需要的可以通过以下方式实现:

jclass arrayListClass = env->FindClass("java/util/ArrayList"); // Find ArrayList class
jmethodID constructor = env->GetMethodID(arrayListClass, "<init>", "()V"); // Find ArrayList constructor
jobject arrayList = env->NewObject(arrayListClass, constructor); // Create new ArrayList instance
jmethodID add = env->GetMethodID(arrayListClass, "add", "(Ljava/lang/Object;)Z"); // Find the ArrayList::add method
jbyteArray item =env->NewByteArray(10); // Instantiate a new byte[]
env->CallBooleanMethod(arrayList, add, item); // Add the byte[] to the ArrayList