7
ネイティブcを使用して、オーディオファイルからjbyteポインタにデータを読み込みます。今私はjbyteArrayとしてjavaに送信したいと思います。AndroidのネイティブcからjbyteArrayを返す
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;
}
どのように行われますか?
してください、編集のmemcpyの特殊なケースです。最初のargはあて先です –
@Roman〜ですが、ここでの意図は* 'memcpy'を使って' data'を 'rawjBytes'にコピーするのですか? & 'SetByteArrayRegion'の代わりに、大規模な' data'を動的に/増分的に構築する必要があるところを示します。 'GetByteArrayElements'を使用して' jbyteArray'コンテンツにアクセスできます。ゼロ値の3番目の引数を持つ 'ReleaseByteArrayElements'を呼び出すと、データが元に戻される(基底のメモリが固定されているかどうかにかかわらず)ことが保証されます。 – violet313
ああ...申し訳ありませんが、私はそれを取得しません。とにかくありがとう、それは私をたくさん助けてくれました。 –