我有以下 JNI 方法,
JNIEXPORT jobject JNICALL Java_projlib_DeserializeBuffer
(JNIEnv *env, jobject obj, jbyteArray inBufferData)
我创建了一个 unsigned char*
的列表并使用从 inBufferData
中提取的一些数据填充它在我的 C++ 代码中
list<unsigned char*> returnBuffer
我想退回 returnBuffer
在我的 Java 代码中,它将是一个字节数组列表,List<byte[]>
.
请告诉我如何通过 jobject
传递 unsigned char* 列表通过 JNI,然后在 Java 中获取它以进行进一步处理。
最佳答案
您将无法直接执行此操作。您必须在 C++ 中实例化所需 Java 列表实现的实例(因为 List
是一个接口(interface)),将其放入 jobject
中,然后添加 jbytearray
项目到它,然后返回列表。
示例
由于我没有工作的 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
关于java - 使用 JNI 将列表 <unsigned char*> 从 C++ 返回到 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33074872/