Zurückgeben von jbyteArray aus native c in Android

Ich benutze native c, um Daten aus einer Audiodatei zu jbyte Zeiger zu lesen. Jetzt möchte ich es an java als jbyteArray senden.

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; } 

Wie es gemacht wird

  • Wie benutzt man Google Übersetzer App
  • Schreiben von Array in Firebase android
  • Android App startet erstmaliges Launch nimmt mehr Zeit auch einige Zeit 30 Sekunden und mehr
  • Brauchen Sie Hilfe beim Herunterladen in Hintergrundbilder in Android?
  • Wie man endlose Liste mit RecyclerView implementiert?
  • Drehen Sie das Zoom-Bild in der android-Bildansicht
  • Sharedpreference Byte Wert freigegeben, nachdem App über "Force Stop" oder Task Manager getötet wurde
  • Kann ich Jmonkeyengine auf Android benutzen?
  • Kompilieren von STXXL unter Android NDK r8b
  • Wie benachrichtigt werden, wifi Netzwerkstatus ändern?
  • Hinzufügen einer benutzerdefinierten Ansicht zu einer Symbolleiste
  • So entfernen Sie Titelleiste aus Aktivität, die ActionBarActivity oder AppcompatActivity mit Dialog Theme erweitert
  • One Solution collect form web for “Zurückgeben von jbyteArray aus native c in Android”

    Verwenden Sie SetByteArrayRegion

     charCnt=fread(data, 1, size, fin); jbyteArray result=(*env)->NewByteArray(env, size); (*env)->SetByteArrayRegion(env, result, 0, size, data); 

    Man könnte auch GetByteArrayElements zB:

     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); 

    Sehen Sie hier für weitere Details zu SetByteArrayRegion , GetByteArrayElements und GetByteArrayElements .

    NB: Diese Frage ist wohl ein besonderer Fall dieser Frage

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.