7
Utilizo c nativo para leer datos de un archivo de audio en el puntero jbyte. Ahora quiero enviarlo a Java como jbyteArray.Devolución de jbyteArray desde c nativo en Android
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;
}
¿Cómo se hace?
Por favor, editar establecimiento de memoria. Primero arg es el destino –
@Roman ~ pero la intención aquí * es * usar 'memcpy' para copiar' data' en 'rawjBytes' ?! & muestra una alternativa a 'SetByteArrayRegion' donde digamos que los' grandes' datos deben construirse de forma dinámica/incremental: podemos usar 'GetByteArrayElements' para obtener acceso al contenido' jbyteArray'; luego, llamar a 'ReleaseByteArrayElements' con tercer valor cero de 3er arg asegura que los datos se vuelvan a copiar (si la memoria subyacente está anclado o no). – violet313
Ow ... Lo siento, no lo entiendo. Muchas gracias de todos modos, me ha ayudado mucho. –