7
Używam natywnego c do odczytu danych z pliku audio do wskaźnika jByte. Teraz chcę wysłać go do java jako jbyteArray.Powracanie jbyteArray z natywnego c w Androidzie
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;
}
Jak to jest zrobione?
Proszę edycji memcpy. Pierwszy argument jest docelowy –
@Roman ~, ale celem tutaj * jest * użycie 'memcpy' do skopiowania' danych' do 'rawjBytes' ?! & demonstruje alternatywę dla 'SetByteArrayRegion', gdzie powiedzmy, że duże' dane' musi być konstruowane dynamicznie/przyrostowo: możemy użyć 'GetByteArrayElements', aby uzyskać dostęp do zawartości' jbyteArray'; następnie wywołanie 'ReleaseByteArrayElements' z 3-wartościowym argonem o wartości zerowej zapewnia skopiowanie danych (niezależnie od tego, czy podpięta jest pamięć podstawowa). – violet313
Ow ... Przepraszam, nie rozumiem. Bardzo dziękuję, bardzo mi to pomogło. –