Ran*_*med 13 c java-native-interface android android-ndk
我使用native c将数据从音频文件读取到jbyte指针.现在我想将它作为jbyteArray发送给java.
jbyteArray Java_com_app_audio_player_readData(JNIEnv * env, jobject jobj,jstring readPath)
{
FILE *fin;
const char *inFile= (*env)->GetStringUTFChars(env,readPath,0);
fin = fopen(inFile, "r");
fseek(fin, 0, SEEK_END); // seek to end of file
int size = ftell(fin); // get current file pointer
fseek(fin, 0, SEEK_SET);
jbyte *data=(jbyte *)malloc(size*sizeof(jbyte));
int charCnt = 0;
charCnt=fread(data, 1, size, fin);
jbyteArray result=(*env)->NewByteArray(env, size);
//-- I want to convert data to jbyteArray and return it to java
fclose(fin);
return result;
}
Run Code Online (Sandbox Code Playgroud)
怎么做的?
vio*_*313 28
使用 SetByteArrayRegion
charCnt=fread(data, 1, size, fin);
jbyteArray result=(*env)->NewByteArray(env, size);
(*env)->SetByteArrayRegion(env, result, 0, size, data);
Run Code Online (Sandbox Code Playgroud)
人们还可以使用GetByteArrayElements
例如:
jboolean isCopy;
jbyte* rawjBytes = (*env)->GetByteArrayElements(env, result, &isCopy);
//do stuff to raw bytes
memcpy(rawjBytes, data, size*sizeof(jbyte));
(*env)->ReleaseByteArrayElements(env, result, rawjBytes, 0);
Run Code Online (Sandbox Code Playgroud)
在这里看到的更多的细节SetByteArrayRegion,GetByteArrayElements和ReleaseByteArrayElements.
注意:这个问题可能是一个特例,这个问题
| 归档时间: |
|
| 查看次数: |
33229 次 |
| 最近记录: |