Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中使用JNI将字节数组数据写入.jpg文件_Android_File_Java Native Interface - Fatal编程技术网

如何在android中使用JNI将字节数组数据写入.jpg文件

如何在android中使用JNI将字节数组数据写入.jpg文件,android,file,java-native-interface,Android,File,Java Native Interface,我想在android中使用JNI将数据的字节数组存储到.jpg文件中。 我使用下面的代码,它将存储字节数组数据,但.jpg文件未打开,或者在phone gallery中打开文件时显示错误 这里是bmpArray:字节数组 文件路径:SD卡目录+文件名 void Java_com_appsforbb_businesscardreader_ImageUtility_setNativeBitmapArray(JNIEnv* env, jclass object,jbyteArray bmpArray,

我想在android中使用JNI将数据的字节数组存储到.jpg文件中。 我使用下面的代码,它将存储字节数组数据,但.jpg文件未打开,或者在phone gallery中打开文件时显示错误

这里是bmpArray:字节数组 文件路径:SD卡目录+文件名

void Java_com_appsforbb_businesscardreader_ImageUtility_setNativeBitmapArray(JNIEnv* env, jclass object,jbyteArray bmpArray,jstring filePath)
{
    jbyte* bmp= env->GetByteArrayElements(bmpArray, 0);
    jsize length = env->GetArrayLength(bmpArray);
    jbyteArray arr = env->NewByteArray(length);
    const char* path = env->GetStringUTFChars(filePath, 0);
    FILE* file = fopen( path, "w+" );
    fwrite(bmpArray, 1, length, file );
    fflush(file);
    fclose(file);
    LOGI("Byte array stored..");
    }
是的,我找到了答案 将参数bmpArray替换为bmp

i、 e


忘记JNI,用Java实现:

OutputStream out = new FileOutputStream(filePath);
out.write(bmpArray);
out.close();

如果它的运行速度不超过您发布的更正版本,我会感到惊讶。

为什么?您可以直接从Java执行此操作。你为什么认为你需要JNI?@EJP它快一点,真的。真的吗?你有证据证明这一说法吗?还是你只是在猜测?您需要跨越一个JNI边界,并且在您发布的代码中至少有三次回调Java。你知道这些操作的成本吗?当你无法让它工作时,你怎么可能测试过它,并且不得不在这里问一个关于如何操作的问题?@challa你能将bytearray转换为位图而不是保存并返回位图吗?问题是:“如何使用JNI将字节数组数据写入android中的.jpg文件”。请保留您的建议…当然。别忘了让我们知道,证明所有额外成本和复杂性的方法要快得多。天哪……如果我有所有努力工作的C代码(转换、修改,…),将结果写入此C文件将更快。@user25562您的问题中没有提到这些,或者当我问您为什么要使用JNI时,在我发布这个答案之前的几个小时。此答案中的代码与您发布的代码完全相同,只是它有效。我回答了你问的问题。3.5年后,仍在等待通过JNI了解它的速度有多快。
OutputStream out = new FileOutputStream(filePath);
out.write(bmpArray);
out.close();