我有以下本机代码从文件复制到缓冲区然后复制 该缓冲区的内容为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?
答案 0 :(得分:1)
简而言之,没有。您可以这样做,但它可能不会更快,如果JVM中的实现发生了变化,您的代码将停止工作。你正在处理文件I / O所以我不认为SetByteArrayRegion是你真正的瓶颈。