我有以下本机代码,可将其从文件复制到缓冲区中,然后将
该缓冲区的内容放入一个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不是您真正的瓶颈。