我有以下本机代码,可将其从文件复制到缓冲区中,然后将
该缓冲区的内容放入一个jbytearray中。

JNIEXPORT void JNICALL Java_com_test(JNIEnv * env, jobject){

 int file_descriptor = 100;
 JNIEnv * jni_env = env;
 FILE* file = fdopen(file_descriptor, "r");
 unsigned char* buffer;
 int size_of_file = 1000000;
 fread(buffer, 1, static_cast<size_t>(size_of_file), file);
 imageArr = static_cast<jbyteArray>(jni_env->NewByteArray(static_cast<jsize> (size_of_file)));
 jni_env->SetByteArrayRegion (imageArr, 0, static_cast<jsize>
    (size_of_file ), (jbyte*)buffer);

}


由于此代码是循环运行的,因此我想尽可能地对其进行优化。有什么办法可以直接从文件读取到jbyteArray吗?我知道jbyteArray是指向结构的指针。有什么方法可以直接设置此结构的字段,而不是使用setByteArrayRegion()函数吗?

如果没有,还有其他功能可以用来从文件读取到jbytearray吗?

最佳答案

简而言之,没有。您可能可以执行此操作,但是它可能不会快得多,并且如果JVM中实现的某些更改,您的代码将停止工作。您正在处理文件I / O,所以我认为SetByteArrayRegion不是您真正的瓶颈。

07-27 13:55