如何直接从文件设置jbytearray

时间:2014-06-26 15:42:21

标签: c android-ndk java-native-interface

我有以下本机代码从文件复制到缓冲区然后复制 该缓冲区的内容为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?

1 个答案:

答案 0 :(得分:1)

简而言之,没有。您可以这样做,但它可能不会更快,如果JVM中的实现发生了变化,您的代码将停止工作。你正在处理文件I / O所以我不认为SetByteArrayRegion是你真正的瓶颈。